diff options
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 2c49ecd05100..5c67b74ca6c6 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); |