Changes in directory llvm/include/llvm/ADT:
StringMap.h updated: 1.11 -> 1.12 --- Log message: add new ShouldRehash method to factor out common code. Fix the dtor to not delete tombstones. --- Diffs of the changes: (+14 -12) StringMap.h | 26 ++++++++++++++------------ 1 files changed, 14 insertions(+), 12 deletions(-) Index: llvm/include/llvm/ADT/StringMap.h diff -u llvm/include/llvm/ADT/StringMap.h:1.11 llvm/include/llvm/ADT/StringMap.h:1.12 --- llvm/include/llvm/ADT/StringMap.h:1.11 Sun Feb 11 15:07:36 2007 +++ llvm/include/llvm/ADT/StringMap.h Sun Feb 11 15:46:36 2007 @@ -58,6 +58,16 @@ StringMapImpl(unsigned InitSize, unsigned ItemSize); void RehashTable(); + /// ShouldRehash - Return true if the table should be rehashed after a new + /// element was recently inserted. + bool ShouldRehash() const { + // If the hash table is now more than 3/4 full, or if fewer than 1/8 of + // the buckets are empty (meaning that many are filled with tombstones), + // grow the table. + return NumItems*4 > NumBuckets*3 || + NumBuckets-(NumItems+NumTombstones) < NumBuckets/8; + } + /// LookupBucketFor - Look up the bucket that the specified string should end /// up in. If it already exists as a key in the map, the Item pointer for the /// specified bucket will be non-null. Otherwise, it will be null. In either @@ -218,11 +228,7 @@ Bucket.Item = KeyValue; ++NumItems; - // If the hash table is now more than 3/4 full, or if fewer than 1/8 of - // the buckets are empty (meaning that many are filled with tombstones), - // grow the table. - if (NumItems*4 > NumBuckets*3 || - NumBuckets-(NumItems+NumTombstones) < NumBuckets/8) + if (ShouldRehash()) RehashTable(); return true; } @@ -247,11 +253,7 @@ // filled in by LookupBucketFor. Bucket.Item = NewItem; - // If the hash table is now more than 3/4 full, or if fewer than 1/8 of - // the buckets are empty (meaning that many are filled with tombstones), - // grow the table. - if (NumItems*4 > NumBuckets*3 || - NumBuckets-(NumItems+NumTombstones) < NumBuckets/8) + if (ShouldRehash()) RehashTable(); return *NewItem; } @@ -264,8 +266,8 @@ ~StringMap() { for (ItemBucket *I = TheTable, *E = TheTable+NumBuckets; I != E; ++I) { - if (MapEntryTy *Id = static_cast<MapEntryTy*>(I->Item)) - Id->Destroy(Allocator); + if (I->Item && I->Item != getTombstoneVal()) + static_cast<MapEntryTy*>(I->Item)->Destroy(Allocator); } delete [] TheTable; } _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits