[llvm-commits] CVS: llvm/include/llvm/ADT/DenseMap.h

Chris Lattner sabre at nondot.org
Sat Feb 3 16:42:57 PST 2007



Changes in directory llvm/include/llvm/ADT:

DenseMap.h updated: 1.15 -> 1.16
---
Log message:

add a version of insert that takes the key and value.


---
Diffs of the changes:  (+23 -8)

 DenseMap.h |   31 +++++++++++++++++++++++--------
 1 files changed, 23 insertions(+), 8 deletions(-)


Index: llvm/include/llvm/ADT/DenseMap.h
diff -u llvm/include/llvm/ADT/DenseMap.h:1.15 llvm/include/llvm/ADT/DenseMap.h:1.16
--- llvm/include/llvm/ADT/DenseMap.h:1.15	Sat Feb  3 13:30:48 2007
+++ llvm/include/llvm/ADT/DenseMap.h	Sat Feb  3 18:42:41 2007
@@ -111,6 +111,16 @@
     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 @@
     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);
   }






More information about the llvm-commits mailing list