add a version of insert that takes the key and value.
authorChris Lattner <sabre@nondot.org>
Sun, 4 Feb 2007 00:42:41 +0000 (00:42 +0000)
committerChris Lattner <sabre@nondot.org>
Sun, 4 Feb 2007 00:42:41 +0000 (00:42 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33856 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/ADT/DenseMap.h

index 646ee40c1544a8122b34d50906d22d5f8a993b14..5d1ad7546e21272ebf7d2a82121b31c4d848347c 100644 (file)
@@ -111,6 +111,16 @@ public:
     return end();
   }
   
+  bool insert(const std::pair<KeyT, ValueT> &KV) {
+    BucketT *TheBucket;
+    if (LookupBucketFor(KV.first, TheBucket))
+      return false; // Already in map.
+    
+    // Otherwise, insert the new element.
+    InsertIntoBucket(KV.first, KV.second, TheBucket);
+    return true;
+  }
+  
   bool erase(const KeyT &Val) {
     BucketT *TheBucket;
     if (!LookupBucketFor(Val, TheBucket))
@@ -129,23 +139,28 @@ public:
     return true;
   }
   
-  ValueT &operator[](const KeyT &Val) {
+  ValueT &operator[](const KeyT &Key) {
     BucketT *TheBucket;
-    if (LookupBucketFor(Val, TheBucket))
+    if (LookupBucketFor(Key, TheBucket))
       return TheBucket->second;
 
+    return InsertIntoBucket(Key, ValueT(), TheBucket)->second;
+  }
+  
+private:
+  BucketT *InsertIntoBucket(const KeyT &Key, const ValueT &Value,
+                            BucketT *TheBucket) {
     // If the load of the hash table is more than 3/4, grow it.
     if (NumEntries*4 >= NumBuckets*3) {
       this->grow();
-      LookupBucketFor(Val, TheBucket);
+      LookupBucketFor(Key, TheBucket);
     }
     ++NumEntries;
-    TheBucket->first = Val;
-    new (&TheBucket->second) ValueT();
-    return TheBucket->second;
+    TheBucket->first = Key;
+    new (&TheBucket->second) ValueT(Value);
+    return TheBucket;
   }
-  
-private:
+
   static unsigned getHashValue(const KeyT &Val) {
     return DenseMapKeyInfo<KeyT>::getHashValue(Val);
   }