diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-16T18·31+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-16T18·31+0000 |
commit | 45610ae675f6f8d6ecbd48c495cb7012b143d531 (patch) | |
tree | 02728674874e94ff89148ae44111be11733f293c /src/fix-ng/fix-expr.cc | |
parent | 3e5a019a070cbaac7d1248e208c66da9fdb23313 (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.cc | 49 |
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); } |