HashSet: Make iterator const.
Nothing that uses this API at present needs a const iterator (and as far as I could see, nothing ever called Remove() on the iterator.) But this is now how HashMap's API works, so let's be consistent.
This commit is contained in:
@@ -88,18 +88,6 @@ public:
|
|||||||
return fElement->fKey;
|
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)
|
Iterator& operator=(const Iterator& other)
|
||||||
{
|
{
|
||||||
fSet = other.fSet;
|
fSet = other.fSet;
|
||||||
@@ -109,7 +97,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Iterator(HashSet<Key>* set)
|
Iterator(const HashSet<Key>* set)
|
||||||
:
|
:
|
||||||
fSet(set),
|
fSet(set),
|
||||||
fIterator(set->fTable.GetIterator()),
|
fIterator(set->fTable.GetIterator()),
|
||||||
@@ -120,7 +108,7 @@ public:
|
|||||||
private:
|
private:
|
||||||
typedef BOpenHashTable<HashSetTableDefinition<Key> > ElementTable;
|
typedef BOpenHashTable<HashSetTableDefinition<Key> > ElementTable;
|
||||||
|
|
||||||
HashSet<Key>* fSet;
|
const HashSet<Key>* fSet;
|
||||||
typename ElementTable::Iterator fIterator;
|
typename ElementTable::Iterator fIterator;
|
||||||
Element* fElement;
|
Element* fElement;
|
||||||
|
|
||||||
@@ -135,12 +123,13 @@ public:
|
|||||||
|
|
||||||
status_t Add(const Key& key);
|
status_t Add(const Key& key);
|
||||||
bool Remove(const Key& key);
|
bool Remove(const Key& key);
|
||||||
|
bool Remove(Iterator& it);
|
||||||
void Clear();
|
void Clear();
|
||||||
bool Contains(const Key& key) const;
|
bool Contains(const Key& key) const;
|
||||||
|
|
||||||
int32 Size() const;
|
int32 Size() const;
|
||||||
|
|
||||||
Iterator GetIterator();
|
Iterator GetIterator() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
typedef BOpenHashTable<HashSetTableDefinition<Key> > ElementTable;
|
typedef BOpenHashTable<HashSetTableDefinition<Key> > ElementTable;
|
||||||
@@ -204,7 +193,7 @@ public:
|
|||||||
return fSet.Size();
|
return fSet.Size();
|
||||||
}
|
}
|
||||||
|
|
||||||
Iterator GetIterator()
|
Iterator GetIterator() const
|
||||||
{
|
{
|
||||||
return fSet.GetIterator();
|
return fSet.GetIterator();
|
||||||
}
|
}
|
||||||
@@ -289,6 +278,23 @@ HashSet<Key>::Remove(const Key& key)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Remove
|
||||||
|
template<typename Key>
|
||||||
|
bool
|
||||||
|
HashSet<Key>::Remove(Iterator& it)
|
||||||
|
{
|
||||||
|
Element* element = it.fElement;
|
||||||
|
if (element == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
fTable.RemoveUnchecked(element);
|
||||||
|
delete element;
|
||||||
|
it.fElement = NULL;
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Clear
|
// Clear
|
||||||
template<typename Key>
|
template<typename Key>
|
||||||
void
|
void
|
||||||
@@ -325,7 +331,7 @@ HashSet<Key>::Size() const
|
|||||||
// GetIterator
|
// GetIterator
|
||||||
template<typename Key>
|
template<typename Key>
|
||||||
typename HashSet<Key>::Iterator
|
typename HashSet<Key>::Iterator
|
||||||
HashSet<Key>::GetIterator()
|
HashSet<Key>::GetIterator() const
|
||||||
{
|
{
|
||||||
return Iterator(this);
|
return Iterator(this);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user