diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-03T20·30+0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2003-11-03T20·30+0000 |
commit | 0690c1c9c01dd5889dbfccf2da6cb99f5c4e151b (patch) | |
tree | c388986ad9539ecf0a238fabfec07873e553021f /src/fix-ng/fix-expr.hh | |
parent | ff3132427839888933c3779844bf35ca9e189cb9 (diff) |
* Work around problems with the ATerm library.
The ATerm library doesn't search the heap for pointers to ATerms when garbage collecting. As a result, C++ containers such as `map<ATerm, ATerm>' will cause pointer to be hidden from the garbage collector, causing crashes. Instead, we now use ATermTables.
Diffstat (limited to 'src/fix-ng/fix-expr.hh')
-rw-r--r-- | src/fix-ng/fix-expr.hh | 40 |
1 files changed, 35 insertions, 5 deletions
diff --git a/src/fix-ng/fix-expr.hh b/src/fix-ng/fix-expr.hh index 700f7beca906..93a010abeda6 100644 --- a/src/fix-ng/fix-expr.hh +++ b/src/fix-ng/fix-expr.hh @@ -14,6 +14,38 @@ typedef ATerm Expr; +/* Mappings from ATerms to ATerms. This is just a wrapper around + ATerm tables. */ +class ATermMap +{ +private: + unsigned int maxLoadPct; + ATermTable table; + +public: + ATermMap(unsigned int initialSize = 16, unsigned int maxLoadPct = 75); + ATermMap(const ATermMap & map); + ~ATermMap(); + + void set(ATerm key, ATerm value); + void set(const string & key, ATerm value); + + ATerm get(ATerm key) const; + ATerm get(const string & key) const; + + void remove(ATerm key); + void remove(const string & key); + + ATermList keys() const; +}; + + +/* Convert a string to an ATerm (i.e., a quoted nullary function + applicaton). */ +ATerm string2ATerm(const string & s); +string aterm2String(ATerm t); + + /* Generic bottomup traversal over ATerms. The traversal first recursively descends into subterms, and then applies the given term function to the resulting term. */ @@ -25,19 +57,17 @@ ATerm bottomupRewrite(TermFun & f, ATerm e); /* Query all attributes in an attribute set expression. The expression must be in normal form. */ -typedef map<string, Expr> Attrs; -void queryAllAttrs(Expr e, Attrs & attrs); +void queryAllAttrs(Expr e, ATermMap & attrs); /* Query a specific attribute from an attribute set expression. The expression must be in normal form. */ Expr queryAttr(Expr e, const string & name); /* Create an attribute set expression from an Attrs value. */ -Expr makeAttrs(const Attrs & attrs); +Expr makeAttrs(const ATermMap & attrs); /* Perform a set of substitutions on an expression. */ -typedef map<string, Expr> Subs; -ATerm substitute(Subs & subs, ATerm e); +Expr substitute(const ATermMap & subs, Expr e); #endif /* !__FIXEXPR_H */ |