about summary refs log tree commit diff
path: root/src/fix-ng/fix-expr.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2003-11-16T18·31+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2003-11-16T18·31+0000
commit45610ae675f6f8d6ecbd48c495cb7012b143d531 (patch)
tree02728674874e94ff89148ae44111be11733f293c /src/fix-ng/fix-expr.cc
parent3e5a019a070cbaac7d1248e208c66da9fdb23313 (diff)
* An forward non-random access input iterator class for ATermLists.
Diffstat (limited to 'src/fix-ng/fix-expr.cc')
-rw-r--r--src/fix-ng/fix-expr.cc49
1 files changed, 16 insertions, 33 deletions
diff --git a/src/fix-ng/fix-expr.cc b/src/fix-ng/fix-expr.cc
index a3d24ba0e6ab..e9c5a3ba633f 100644
--- a/src/fix-ng/fix-expr.cc
+++ b/src/fix-ng/fix-expr.cc
@@ -18,10 +18,8 @@ ATermMap::ATermMap(const ATermMap & map)
     table = ATtableCreate(ATgetLength(keys), map.maxLoadPct);
     if (!table) throw Error("cannot create ATerm table");
 
-    for (; !ATisEmpty(keys); keys = ATgetNext(keys)) {
-        ATerm key = ATgetFirst(keys);
-        set(key, map.get(key));
-    }
+    for (ATermIterator i(keys); i; ++i)
+        set(*i, map.get(*i));
 }
 
 
@@ -104,10 +102,8 @@ ATerm bottomupRewrite(TermFun & f, ATerm e)
         ATermList in = (ATermList) e;
         ATermList out = ATempty;
 
-        while (!ATisEmpty(in)) {
-            out = ATinsert(out, bottomupRewrite(f, ATgetFirst(in)));
-            in = ATgetNext(in);
-        }
+        for (ATermIterator i(in); i; ++i)
+            out = ATinsert(out, bottomupRewrite(f, *i));
 
         e = (ATerm) ATreverse(out);
     }
@@ -123,13 +119,12 @@ void queryAllAttrs(Expr e, ATermMap & attrs)
     if (!(atMatch(m, e) >> "Attrs" >> bnds))
         throw badTerm("expected attribute set", e);
 
-    while (!ATisEmpty(bnds)) {
+    for (ATermIterator i(bnds); i; ++i) {
         string s;
         Expr e;
-        if (!(atMatch(m, ATgetFirst(bnds)) >> "Bind" >> s >> e))
+        if (!(atMatch(m, *i) >> "Bind" >> s >> e))
             abort(); /* can't happen */
         attrs.set(s, e);
-        bnds = ATgetNext(bnds);
     }
 }
 
@@ -144,13 +139,10 @@ Expr queryAttr(Expr e, const string & name)
 
 Expr makeAttrs(const ATermMap & attrs)
 {
-    ATermList bnds = ATempty, keys = attrs.keys();
-    while (!ATisEmpty(keys)) {
-        Expr key = ATgetFirst(keys);
+    ATermList bnds = ATempty;
+    for (ATermIterator i(attrs.keys()); i; ++i)
         bnds = ATinsert(bnds, 
-            ATmake("Bind(<term>, <term>)", key, attrs.get(key)));
-        keys = ATgetNext(keys);
-    }
+            ATmake("Bind(<term>, <term>)", *i, attrs.get(*i)));
     return ATmake("Attrs(<term>)", ATreverse(bnds));
 }
 
@@ -171,14 +163,12 @@ Expr substitute(const ATermMap & subs, Expr e)
     ATerm body;
     if (atMatch(m, e) >> "Function" >> formals >> body) {
         ATermMap subs2(subs);
-        ATermList fs = formals;
-        while (!ATisEmpty(fs)) {
+        for (ATermIterator i(formals); i; ++i) {
             Expr def;
-            if (!(atMatch(m, ATgetFirst(fs)) >> "NoDefFormal" >> s) &&
-                !(atMatch(m, ATgetFirst(fs)) >> "DefFormal" >> s >> def))
+            if (!(atMatch(m, *i) >> "NoDefFormal" >> s) &&
+                !(atMatch(m, *i) >> "DefFormal" >> s >> def))
                 abort();
             subs2.remove(s);
-            fs = ATgetNext(fs);
         }
         return ATmake("Function(<term>, <term>)", formals,
             substitute(subs2, body));
@@ -188,13 +178,11 @@ Expr substitute(const ATermMap & subs, Expr e)
     ATermList bindings;
     if (atMatch(m, e) >> "Rec" >> bindings) {
         ATermMap subs2(subs);
-        ATermList bnds = bindings;
-        while (!ATisEmpty(bnds)) {
+        for (ATermIterator i(bindings); i; ++i) {
             Expr e;
-            if (!(atMatch(m, ATgetFirst(bnds)) >> "Bind" >> s >> e))
+            if (!(atMatch(m, *i) >> "Bind" >> s >> e))
                 abort(); /* can't happen */
             subs2.remove(s);
-            bnds = ATgetNext(bnds);
         }
         return ATmake("Rec(<term>)", substitute(subs2, (ATerm) bindings));
     }
@@ -211,14 +199,9 @@ Expr substitute(const ATermMap & subs, Expr e)
     }
 
     if (ATgetType(e) == AT_LIST) {
-        ATermList in = (ATermList) e;
         ATermList out = ATempty;
-
-        while (!ATisEmpty(in)) {
-            out = ATinsert(out, substitute(subs, ATgetFirst(in)));
-            in = ATgetNext(in);
-        }
-
+        for (ATermIterator i((ATermList) e); i; ++i)
+            out = ATinsert(out, substitute(subs, *i));
         return (ATerm) ATreverse(out);
     }