Allow CDHashMaps for objects without default constructors (#1092)
authorMartin <martin.brain@cs.ox.ac.uk>
Thu, 5 Oct 2017 09:08:53 +0000 (10:08 +0100)
committerAndres Noetzli <andres.noetzli@gmail.com>
Thu, 5 Oct 2017 09:08:53 +0000 (02:08 -0700)
This is a patch, originally from mdeters/cdhashmap-default-constructibility that allows CDHashMaps to be declared for objects that don't have default constructors.

src/context/cdhashmap.h

index 5b7a4dab166fab6f94664537daaf990019cf7623..82aa908917cee1fac266e0c455937c315373b411 100644 (file)
@@ -180,7 +180,7 @@ public:
          bool allocatedInCMM = false) :
     ContextObj(allocatedInCMM, context),
     d_key(key),
-    d_data(),
+    d_data(data),
     d_map(NULL),
     d_noTrash(allocatedInCMM) {
 
@@ -343,7 +343,7 @@ public:
     Element* obj;
     if(i == d_map.end()) {// create new object
       obj = new(true) Element(d_context, this, k, Data());
-      d_map[k] = obj;
+      d_map.insert(std::make_pair(k, obj));
     } else {
       obj = (*i).second;
     }
@@ -355,7 +355,7 @@ public:
 
     if(i == d_map.end()) {// create new object
       Element* obj = new(true) Element(d_context, this, k, d);
-      d_map[k] = obj;
+      d_map.insert(std::make_pair(k, obj));
       return true;
     } else {
       (*i).second->set(d);
@@ -392,7 +392,7 @@ public:
 
     Element* obj = new(true) Element(d_context, this, k, d,
                                      true /* atLevelZero */);
-    d_map[k] = obj;
+    d_map.insert(std::make_pair(k, obj));
   }
 
   // FIXME: no erase(), too much hassle to implement efficiently...