aboutsummaryrefslogtreecommitdiff
path: root/src/libexpr/nixexpr.cc
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2005-05-08 10:28:19 +0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2005-05-08 10:28:19 +0000
commit426593162ee4b22443dfca428083047ca1e39ac7 (patch)
treed71ac2baad00db9c87a5fa0d21d5c9b7547e2e26 /src/libexpr/nixexpr.cc
parent77557a6f06500e0a464f54c7b4b4f5162d0359bc (diff)
* ATermMap needs an assignment operator, otherwise we are screwed.
Diffstat (limited to 'src/libexpr/nixexpr.cc')
-rw-r--r--src/libexpr/nixexpr.cc37
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);