From aef806e9cb021919be8f3a988af0478f3da75758 Mon Sep 17 00:00:00 2001 From: Ted Kremenek Date: Thu, 1 Nov 2007 00:54:57 +0000 Subject: [PATCH] Added typedef "value_type" to DenseMap (similar typedef appears in std::map). Added method FindAndConstruct() to DenseMap, which does the same thing as operator[], except that it refers value_type& (a reference to both the key and mapped data pair). This method is useful for clients that wish to access the stored key value, as opposed to the key used to do the actual lookup (these need not always be the same). Redefined operator[] to use FindAndConstruct() (same logic). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@43594 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/DenseMap.h | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/include/llvm/ADT/DenseMap.h b/include/llvm/ADT/DenseMap.h index 91f00f99fe3..7f02dc92e21 100644 --- a/include/llvm/ADT/DenseMap.h +++ b/include/llvm/ADT/DenseMap.h @@ -63,6 +63,8 @@ class DenseMap { unsigned NumEntries; unsigned NumTombstones; public: + typedef BucketT value_type; + DenseMap(const DenseMap& other) { NumBuckets = 0; CopyFrom(other); @@ -174,13 +176,17 @@ public: ++NumTombstones; return true; } - - ValueT &operator[](const KeyT &Key) { + + value_type& FindAndConstruct(const KeyT &Key) { BucketT *TheBucket; if (LookupBucketFor(Key, TheBucket)) - return TheBucket->second; - - return InsertIntoBucket(Key, ValueT(), TheBucket)->second; + return *TheBucket; + + return *InsertIntoBucket(Key, ValueT(), TheBucket); + } + + ValueT &operator[](const KeyT &Key) { + return FindAndConstruct(Key).second; } DenseMap& operator=(const DenseMap& other) {