Bug 1171833 - Remove PL_DHashTableEnumerator use from nsPropertyTable. r=smaug.

This commit is contained in:
Nicholas Nethercote 2015-06-08 16:01:23 -07:00
parent f87ccde2a2
commit 015cb7815d

View File

@ -133,30 +133,16 @@ nsPropertyTable::Enumerate(nsPropertyOwner aObject,
} }
} }
struct PropertyEnumeratorData
{
nsIAtom* mName;
NSPropertyFunc mCallBack;
void* mData;
};
static PLDHashOperator
PropertyEnumerator(PLDHashTable* aTable, PLDHashEntryHdr* aHdr,
uint32_t aNumber, void* aArg)
{
PropertyListMapEntry* entry = static_cast<PropertyListMapEntry*>(aHdr);
PropertyEnumeratorData* data = static_cast<PropertyEnumeratorData*>(aArg);
data->mCallBack(const_cast<void*>(entry->key), data->mName, entry->value,
data->mData);
return PL_DHASH_NEXT;
}
void void
nsPropertyTable::EnumerateAll(NSPropertyFunc aCallBack, void* aData) nsPropertyTable::EnumerateAll(NSPropertyFunc aCallBack, void* aData)
{ {
for (PropertyList* prop = mPropertyList; prop; prop = prop->mNext) { for (PropertyList* prop = mPropertyList; prop; prop = prop->mNext) {
PropertyEnumeratorData data = { prop->mName, aCallBack, aData }; PLDHashTable::Iterator iter(&prop->mObjectValueMap);
PL_DHashTableEnumerate(&prop->mObjectValueMap, PropertyEnumerator, &data); while (iter.HasMoreEntries()) {
auto entry = static_cast<PropertyListMapEntry*>(iter.NextEntry());
aCallBack(const_cast<void*>(entry->key), prop->mName, entry->value,
aData);
}
} }
} }
@ -294,25 +280,17 @@ nsPropertyTable::PropertyList::~PropertyList()
{ {
} }
static PLDHashOperator
DestroyPropertyEnumerator(PLDHashTable *table, PLDHashEntryHdr *hdr,
uint32_t number, void *arg)
{
nsPropertyTable::PropertyList *propList =
static_cast<nsPropertyTable::PropertyList*>(arg);
PropertyListMapEntry* entry = static_cast<PropertyListMapEntry*>(hdr);
propList->mDtorFunc(const_cast<void*>(entry->key), propList->mName,
entry->value, propList->mDtorData);
return PL_DHASH_NEXT;
}
void void
nsPropertyTable::PropertyList::Destroy() nsPropertyTable::PropertyList::Destroy()
{ {
// Enumerate any remaining object/value pairs and destroy the value object // Enumerate any remaining object/value pairs and destroy the value object.
if (mDtorFunc) if (mDtorFunc) {
PL_DHashTableEnumerate(&mObjectValueMap, DestroyPropertyEnumerator, this); PLDHashTable::Iterator iter(&mObjectValueMap);
while (iter.HasMoreEntries()) {
auto entry = static_cast<PropertyListMapEntry*>(iter.NextEntry());
mDtorFunc(const_cast<void*>(entry->key), mName, entry->value, mDtorData);
}
}
} }
bool bool