diff options
author | MichalMoskal <unknown> | 2010-10-14 21:45:32 +0000 |
---|---|---|
committer | MichalMoskal <unknown> | 2010-10-14 21:45:32 +0000 |
commit | 0cc0ae1ee83d8901fcf79492926c414d62f8f416 (patch) | |
tree | b8a32a2bf5eb156c5c8d3d7eeb8ef7fcff9f0fff /Source/Model/Model.cs | |
parent | 2cf9c9394780b1affd5a764b269757310d977b7a (diff) |
Implement struct printing
Diffstat (limited to 'Source/Model/Model.cs')
-rw-r--r-- | Source/Model/Model.cs | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/Source/Model/Model.cs b/Source/Model/Model.cs index 42302d00..3e5ff0c3 100644 --- a/Source/Model/Model.cs +++ b/Source/Model/Model.cs @@ -35,25 +35,12 @@ namespace Microsoft.Boogie }
}
- public IEnumerable<FuncTuple> ArgReferences
- {
- get
- {
- foreach (var f in references) {
- if (f.Result != this)
- yield return f;
- else
- foreach (var r in f.Args)
- if (r == this) { yield return f; break; }
- }
- }
- }
-
protected Element(Model p) { Model = p; }
public abstract ElementKind Kind { get; }
public virtual int AsInt() { throw new NotImplementedException(); }
}
+ #region element kinds
public class Uninterpreted : Element
{
public override ElementKind Kind { get { return ElementKind.Uninterpreted; } }
@@ -92,6 +79,7 @@ namespace Microsoft.Boogie public override ElementKind Kind { get { return ElementKind.Boolean; } }
public override string ToString() { return Value ? "true" : "false"; }
}
+ #endregion
public class Func
{
@@ -113,6 +101,36 @@ namespace Microsoft.Boogie res.references.Add(t);
}
+ public FuncTuple AppWithArg(int argIdx, Element elt)
+ {
+ foreach (var a in AppsWithArg(argIdx, elt))
+ return a;
+ return null;
+ }
+
+ public FuncTuple AppWithResult(Element elt)
+ {
+ foreach (var a in AppsWithResult(elt))
+ return a;
+ return null;
+ }
+
+ public IEnumerable<FuncTuple> AppsWithArg(int argIdx, Element elt)
+ {
+ foreach (var r in elt.References) {
+ if (r.Func == this && r.Args[argIdx] == elt)
+ yield return r;
+ }
+ }
+
+ public IEnumerable<FuncTuple> AppsWithResult(Element elt)
+ {
+ foreach (var r in elt.References) {
+ if (r.Func == this && r.Result == elt)
+ yield return r;
+ }
+ }
+
public Element GetConstant()
{
if (Arity != 0)
@@ -122,6 +140,20 @@ namespace Microsoft.Boogie return apps[0].Result;
}
+ public Element TryEval(params Element[] args)
+ {
+ foreach (var tpl in apps) {
+ bool same = true;
+ for (int i = 0; i < args.Length; ++i)
+ if (tpl.Args[i] != args[i]) {
+ same = false;
+ break;
+ }
+ if (same) return tpl.Result;
+ }
+ return null;
+ }
+
public void AddApp(Element res, params Element[] args)
{
if (Arity == 0)
|