Add EnumerateEntries to nsCheapSet. Bug 809446, r=bsmedberg

This commit is contained in:
Simon Montagu 2012-11-20 06:21:13 -08:00
Родитель b3b82bec15
Коммит 2c79e554a2
1 изменённых файлов: 20 добавлений и 0 удалений

Просмотреть файл

@ -18,6 +18,7 @@ class nsCheapSet
{
public:
typedef typename EntryType::KeyType KeyType;
typedef PLDHashOperator (* Enumerator)(EntryType* aEntry, void* userArg);
nsCheapSet() : mState(ZERO)
{
@ -58,6 +59,25 @@ public:
}
}
uint32_t EnumerateEntries(Enumerator enumFunc, void* userArg)
{
switch (mState) {
case ZERO:
return 0;
case ONE:
if (enumFunc(GetSingleEntry(), userArg) == PL_DHASH_REMOVE) {
GetSingleEntry()->~EntryType();
mState = ZERO;
}
return 1;
case MANY:
return mUnion.table->EnumerateEntries(enumFunc, userArg);
default:
NS_NOTREACHED("bogus state");
return 0;
}
}
private:
EntryType* GetSingleEntry()
{