diff options
author | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-05-08 10:28:19 +0000 |
---|---|---|
committer | Eelco Dolstra <e.dolstra@tudelft.nl> | 2005-05-08 10:28:19 +0000 |
commit | 426593162ee4b22443dfca428083047ca1e39ac7 (patch) | |
tree | d71ac2baad00db9c87a5fa0d21d5c9b7547e2e26 /src/libexpr/nixexpr.cc | |
parent | 77557a6f06500e0a464f54c7b4b4f5162d0359bc (diff) |
* ATermMap needs an assignment operator, otherwise we are screwed.
Diffstat (limited to 'src/libexpr/nixexpr.cc')
-rw-r--r-- | src/libexpr/nixexpr.cc | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/src/libexpr/nixexpr.cc b/src/libexpr/nixexpr.cc index 2c49ecd05..5c67b74ca 100644 --- a/src/libexpr/nixexpr.cc +++ b/src/libexpr/nixexpr.cc @@ -7,6 +7,7 @@ ATermMap::ATermMap(unsigned int initialSize, unsigned int maxLoadPct) + : table(0) { this->maxLoadPct = maxLoadPct; table = ATtableCreate(initialSize, maxLoadPct); @@ -17,6 +18,36 @@ ATermMap::ATermMap(unsigned int initialSize, unsigned int maxLoadPct) ATermMap::ATermMap(const ATermMap & map) : table(0) { + copy(map); +} + + +ATermMap::~ATermMap() +{ + free(); +} + + +ATermMap & ATermMap::operator = (const ATermMap & map) +{ + if (this == &map) return *this; + free(); + copy(map); + return *this; +} + + +void ATermMap::free() +{ + if (table) { + ATtableDestroy(table); + table = 0; + } +} + + +void ATermMap::copy(const ATermMap & map) +{ ATermList keys = map.keys(); /* !!! adjust allocation for load pct */ @@ -28,12 +59,6 @@ ATermMap::ATermMap(const ATermMap & map) } -ATermMap::~ATermMap() -{ - if (table) ATtableDestroy(table); -} - - void ATermMap::set(ATerm key, ATerm value) { return ATtablePut(table, key, value); |