diff --git a/headers/private/shared/HashSet.h b/headers/private/shared/HashSet.h index e8d75de984..7c2bd71004 100644 --- a/headers/private/shared/HashSet.h +++ b/headers/private/shared/HashSet.h @@ -88,18 +88,6 @@ public: return fElement->fKey; } - bool Remove() - { - if (fElement == NULL) - return false; - - fSet->fTable.RemoveUnchecked(fElement); - delete fElement; - fElement = NULL; - - return true; - } - Iterator& operator=(const Iterator& other) { fSet = other.fSet; @@ -109,7 +97,7 @@ public: } private: - Iterator(HashSet* set) + Iterator(const HashSet* set) : fSet(set), fIterator(set->fTable.GetIterator()), @@ -120,7 +108,7 @@ public: private: typedef BOpenHashTable > ElementTable; - HashSet* fSet; + const HashSet* fSet; typename ElementTable::Iterator fIterator; Element* fElement; @@ -135,12 +123,13 @@ public: status_t Add(const Key& key); bool Remove(const Key& key); + bool Remove(Iterator& it); void Clear(); bool Contains(const Key& key) const; int32 Size() const; - Iterator GetIterator(); + Iterator GetIterator() const; protected: typedef BOpenHashTable > ElementTable; @@ -204,7 +193,7 @@ public: return fSet.Size(); } - Iterator GetIterator() + Iterator GetIterator() const { return fSet.GetIterator(); } @@ -289,6 +278,23 @@ HashSet::Remove(const Key& key) } +// Remove +template +bool +HashSet::Remove(Iterator& it) +{ + Element* element = it.fElement; + if (element == NULL) + return false; + + fTable.RemoveUnchecked(element); + delete element; + it.fElement = NULL; + + return true; +} + + // Clear template void @@ -325,7 +331,7 @@ HashSet::Size() const // GetIterator template typename HashSet::Iterator -HashSet::GetIterator() +HashSet::GetIterator() const { return Iterator(this); }