From 509e4f30e85355540dc3bf52629d2356cfd4c1bf Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Wed, 2 Jul 2008 05:30:45 +0000 Subject: [PATCH] optimize StringMap::clear git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53009 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/ADT/StringMap.h | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/include/llvm/ADT/StringMap.h b/include/llvm/ADT/StringMap.h index 7189931abb9..6675d04f8d0 100644 --- a/include/llvm/ADT/StringMap.h +++ b/include/llvm/ADT/StringMap.h @@ -335,8 +335,16 @@ public: // clear - Empties out the StringMap void clear() { - while (!empty()) - erase(begin()); + if (empty()) return; + + // Zap all values, resetting the keys back to non-present (not tombstone), + // which is safe because we're removing all elements. + for (ItemBucket *I = TheTable, *E = TheTable+NumBuckets; I != E; ++I) { + if (I->Item && I->Item != getTombstoneVal()) { + static_cast(I->Item)->Destroy(Allocator); + I->Item = 0; + } + } } /// GetOrCreateValue - Look up the specified key in the table. If a value @@ -398,10 +406,7 @@ public: } ~StringMap() { - for (ItemBucket *I = TheTable, *E = TheTable+NumBuckets; I != E; ++I) { - if (I->Item && I->Item != getTombstoneVal()) - static_cast(I->Item)->Destroy(Allocator); - } + clear(); free(TheTable); } private: