Bug 1118024 - Add explicit PL_DHashTable{Add,Lookup,Remove} functions. r=nfroyd
This commit is contained in:
@@ -898,8 +898,7 @@ PtrInfo*
|
|||||||
CCGraph::FindNode(void* aPtr)
|
CCGraph::FindNode(void* aPtr)
|
||||||
{
|
{
|
||||||
PtrToNodeEntry* e =
|
PtrToNodeEntry* e =
|
||||||
static_cast<PtrToNodeEntry*>(PL_DHashTableOperate(&mPtrToNodeMap, aPtr,
|
static_cast<PtrToNodeEntry*>(PL_DHashTableLookup(&mPtrToNodeMap, aPtr));
|
||||||
PL_DHASH_LOOKUP));
|
|
||||||
if (!PL_DHASH_ENTRY_IS_BUSY(e)) {
|
if (!PL_DHASH_ENTRY_IS_BUSY(e)) {
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
@@ -911,8 +910,7 @@ CCGraph::AddNodeToMap(void* aPtr)
|
|||||||
{
|
{
|
||||||
JS::AutoSuppressGCAnalysis suppress;
|
JS::AutoSuppressGCAnalysis suppress;
|
||||||
PtrToNodeEntry* e =
|
PtrToNodeEntry* e =
|
||||||
static_cast<PtrToNodeEntry*>(PL_DHashTableOperate(&mPtrToNodeMap, aPtr,
|
static_cast<PtrToNodeEntry*>(PL_DHashTableAdd(&mPtrToNodeMap, aPtr));
|
||||||
PL_DHASH_ADD));
|
|
||||||
if (!e) {
|
if (!e) {
|
||||||
// Caller should track OOMs
|
// Caller should track OOMs
|
||||||
return nullptr;
|
return nullptr;
|
||||||
@@ -923,7 +921,7 @@ CCGraph::AddNodeToMap(void* aPtr)
|
|||||||
void
|
void
|
||||||
CCGraph::RemoveNodeFromMap(void* aPtr)
|
CCGraph::RemoveNodeFromMap(void* aPtr)
|
||||||
{
|
{
|
||||||
PL_DHashTableOperate(&mPtrToNodeMap, aPtr, PL_DHASH_REMOVE);
|
PL_DHashTableRemove(&mPtrToNodeMap, aPtr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -404,7 +404,7 @@ AtomImpl::~AtomImpl()
|
|||||||
// |AtomTableClearEntry|.
|
// |AtomTableClearEntry|.
|
||||||
if (!IsPermanentInDestructor()) {
|
if (!IsPermanentInDestructor()) {
|
||||||
AtomTableKey key(mString, mLength, mHash);
|
AtomTableKey key(mString, mLength, mHash);
|
||||||
PL_DHashTableOperate(&gAtomTable, &key, PL_DHASH_REMOVE);
|
PL_DHashTableRemove(&gAtomTable, &key);
|
||||||
if (gAtomTable.ops && gAtomTable.EntryCount() == 0) {
|
if (gAtomTable.ops && gAtomTable.EntryCount() == 0) {
|
||||||
PL_DHashTableFinish(&gAtomTable);
|
PL_DHashTableFinish(&gAtomTable);
|
||||||
NS_ASSERTION(gAtomTable.EntryCount() == 0,
|
NS_ASSERTION(gAtomTable.EntryCount() == 0,
|
||||||
@@ -555,7 +555,7 @@ GetAtomHashEntry(const char* aString, uint32_t aLength, uint32_t* aHashOut)
|
|||||||
EnsureTableExists();
|
EnsureTableExists();
|
||||||
AtomTableKey key(aString, aLength, aHashOut);
|
AtomTableKey key(aString, aLength, aHashOut);
|
||||||
AtomTableEntry* e = static_cast<AtomTableEntry*>(
|
AtomTableEntry* e = static_cast<AtomTableEntry*>(
|
||||||
PL_DHashTableOperate(&gAtomTable, &key, PL_DHASH_ADD));
|
PL_DHashTableAdd(&gAtomTable, &key));
|
||||||
if (!e) {
|
if (!e) {
|
||||||
NS_ABORT_OOM(gAtomTable.EntryCount() * gAtomTable.EntrySize());
|
NS_ABORT_OOM(gAtomTable.EntryCount() * gAtomTable.EntrySize());
|
||||||
}
|
}
|
||||||
@@ -569,7 +569,7 @@ GetAtomHashEntry(const char16_t* aString, uint32_t aLength, uint32_t* aHashOut)
|
|||||||
EnsureTableExists();
|
EnsureTableExists();
|
||||||
AtomTableKey key(aString, aLength, aHashOut);
|
AtomTableKey key(aString, aLength, aHashOut);
|
||||||
AtomTableEntry* e = static_cast<AtomTableEntry*>(
|
AtomTableEntry* e = static_cast<AtomTableEntry*>(
|
||||||
PL_DHashTableOperate(&gAtomTable, &key, PL_DHASH_ADD));
|
PL_DHashTableAdd(&gAtomTable, &key));
|
||||||
if (!e) {
|
if (!e) {
|
||||||
NS_ABORT_OOM(gAtomTable.EntryCount() * gAtomTable.EntrySize());
|
NS_ABORT_OOM(gAtomTable.EntryCount() * gAtomTable.EntrySize());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -533,7 +533,7 @@ nsPersistentProperties::SetStringProperty(const nsACString& aKey,
|
|||||||
{
|
{
|
||||||
const nsAFlatCString& flatKey = PromiseFlatCString(aKey);
|
const nsAFlatCString& flatKey = PromiseFlatCString(aKey);
|
||||||
PropertyTableEntry* entry = static_cast<PropertyTableEntry*>(
|
PropertyTableEntry* entry = static_cast<PropertyTableEntry*>(
|
||||||
PL_DHashTableOperate(&mTable, flatKey.get(), PL_DHASH_ADD));
|
PL_DHashTableAdd(&mTable, flatKey.get()));
|
||||||
|
|
||||||
if (entry->mKey) {
|
if (entry->mKey) {
|
||||||
aOldValue = entry->mValue;
|
aOldValue = entry->mValue;
|
||||||
@@ -572,7 +572,7 @@ nsPersistentProperties::GetStringProperty(const nsACString& aKey,
|
|||||||
const nsAFlatCString& flatKey = PromiseFlatCString(aKey);
|
const nsAFlatCString& flatKey = PromiseFlatCString(aKey);
|
||||||
|
|
||||||
PropertyTableEntry* entry = static_cast<PropertyTableEntry*>(
|
PropertyTableEntry* entry = static_cast<PropertyTableEntry*>(
|
||||||
PL_DHashTableOperate(&mTable, flatKey.get(), PL_DHASH_LOOKUP));
|
PL_DHashTableLookup(&mTable, flatKey.get()));
|
||||||
|
|
||||||
if (PL_DHASH_ENTRY_IS_FREE(entry)) {
|
if (PL_DHASH_ENTRY_IS_FREE(entry)) {
|
||||||
return NS_ERROR_FAILURE;
|
return NS_ERROR_FAILURE;
|
||||||
@@ -644,7 +644,7 @@ NS_IMETHODIMP
|
|||||||
nsPersistentProperties::Has(const char* aProp, bool* aResult)
|
nsPersistentProperties::Has(const char* aProp, bool* aResult)
|
||||||
{
|
{
|
||||||
PropertyTableEntry* entry = static_cast<PropertyTableEntry*>(
|
PropertyTableEntry* entry = static_cast<PropertyTableEntry*>(
|
||||||
PL_DHashTableOperate(&mTable, aProp, PL_DHASH_LOOKUP));
|
PL_DHashTableLookup(&mTable, aProp));
|
||||||
*aResult = (entry && PL_DHASH_ENTRY_IS_BUSY(entry));
|
*aResult = (entry && PL_DHASH_ENTRY_IS_BUSY(entry));
|
||||||
return NS_OK;
|
return NS_OK;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -170,8 +170,7 @@ nsStaticCaseInsensitiveNameTable::Init(const char* const aNames[],
|
|||||||
NameTableKey key(strPtr);
|
NameTableKey key(strPtr);
|
||||||
|
|
||||||
NameTableEntry* entry =
|
NameTableEntry* entry =
|
||||||
static_cast<NameTableEntry*>(PL_DHashTableOperate(&mNameTable, &key,
|
static_cast<NameTableEntry*>(PL_DHashTableAdd(&mNameTable, &key));
|
||||||
PL_DHASH_ADD));
|
|
||||||
if (!entry) {
|
if (!entry) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -197,8 +196,7 @@ nsStaticCaseInsensitiveNameTable::Lookup(const nsACString& aName)
|
|||||||
|
|
||||||
NameTableKey key(&str);
|
NameTableKey key(&str);
|
||||||
NameTableEntry* entry =
|
NameTableEntry* entry =
|
||||||
static_cast<NameTableEntry*>(PL_DHashTableOperate(&mNameTable, &key,
|
static_cast<NameTableEntry*>(PL_DHashTableLookup(&mNameTable, &key));
|
||||||
PL_DHASH_LOOKUP));
|
|
||||||
if (PL_DHASH_ENTRY_IS_FREE(entry)) {
|
if (PL_DHASH_ENTRY_IS_FREE(entry)) {
|
||||||
return nsStaticCaseInsensitiveNameTable::NOT_FOUND;
|
return nsStaticCaseInsensitiveNameTable::NOT_FOUND;
|
||||||
}
|
}
|
||||||
@@ -216,8 +214,7 @@ nsStaticCaseInsensitiveNameTable::Lookup(const nsAString& aName)
|
|||||||
|
|
||||||
NameTableKey key(&str);
|
NameTableKey key(&str);
|
||||||
NameTableEntry* entry =
|
NameTableEntry* entry =
|
||||||
static_cast<NameTableEntry*>(PL_DHashTableOperate(&mNameTable, &key,
|
static_cast<NameTableEntry*>(PL_DHashTableLookup(&mNameTable, &key));
|
||||||
PL_DHASH_LOOKUP));
|
|
||||||
if (PL_DHASH_ENTRY_IS_FREE(entry)) {
|
if (PL_DHASH_ENTRY_IS_FREE(entry)) {
|
||||||
return nsStaticCaseInsensitiveNameTable::NOT_FOUND;
|
return nsStaticCaseInsensitiveNameTable::NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -128,8 +128,8 @@ public:
|
|||||||
NS_ASSERTION(mTable.ops, "nsTHashtable was not initialized properly.");
|
NS_ASSERTION(mTable.ops, "nsTHashtable was not initialized properly.");
|
||||||
|
|
||||||
EntryType* entry = reinterpret_cast<EntryType*>(
|
EntryType* entry = reinterpret_cast<EntryType*>(
|
||||||
PL_DHashTableOperate(const_cast<PLDHashTable*>(&mTable),
|
PL_DHashTableLookup(const_cast<PLDHashTable*>(&mTable),
|
||||||
EntryType::KeyToPointer(aKey), PL_DHASH_LOOKUP));
|
EntryType::KeyToPointer(aKey)));
|
||||||
return PL_DHASH_ENTRY_IS_BUSY(entry) ? entry : nullptr;
|
return PL_DHASH_ENTRY_IS_BUSY(entry) ? entry : nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,8 +158,8 @@ public:
|
|||||||
EntryType* PutEntry(KeyType aKey, const fallible_t&) NS_WARN_UNUSED_RESULT {
|
EntryType* PutEntry(KeyType aKey, const fallible_t&) NS_WARN_UNUSED_RESULT {
|
||||||
NS_ASSERTION(mTable.ops, "nsTHashtable was not initialized properly.");
|
NS_ASSERTION(mTable.ops, "nsTHashtable was not initialized properly.");
|
||||||
|
|
||||||
return static_cast<EntryType*>(PL_DHashTableOperate(
|
return static_cast<EntryType*>(PL_DHashTableAdd(
|
||||||
&mTable, EntryType::KeyToPointer(aKey), PL_DHASH_ADD));
|
&mTable, EntryType::KeyToPointer(aKey)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -170,9 +170,8 @@ public:
|
|||||||
{
|
{
|
||||||
NS_ASSERTION(mTable.ops, "nsTHashtable was not initialized properly.");
|
NS_ASSERTION(mTable.ops, "nsTHashtable was not initialized properly.");
|
||||||
|
|
||||||
PL_DHashTableOperate(&mTable,
|
PL_DHashTableRemove(&mTable,
|
||||||
EntryType::KeyToPointer(aKey),
|
EntryType::KeyToPointer(aKey));
|
||||||
PL_DHASH_REMOVE);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -667,6 +667,24 @@ PL_DHashTableOperate(PLDHashTable* aTable, const void* aKey, PLDHashOperator aOp
|
|||||||
return aTable->Operate(aKey, aOp);
|
return aTable->Operate(aKey, aOp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PLDHashEntryHdr* PL_DHASH_FASTCALL
|
||||||
|
PL_DHashTableLookup(PLDHashTable* aTable, const void* aKey)
|
||||||
|
{
|
||||||
|
return aTable->Operate(aKey, PL_DHASH_LOOKUP);
|
||||||
|
}
|
||||||
|
|
||||||
|
PLDHashEntryHdr* PL_DHASH_FASTCALL
|
||||||
|
PL_DHashTableAdd(PLDHashTable* aTable, const void* aKey)
|
||||||
|
{
|
||||||
|
return aTable->Operate(aKey, PL_DHASH_ADD);
|
||||||
|
}
|
||||||
|
|
||||||
|
void PL_DHASH_FASTCALL
|
||||||
|
PL_DHashTableRemove(PLDHashTable* aTable, const void* aKey)
|
||||||
|
{
|
||||||
|
aTable->Operate(aKey, PL_DHASH_REMOVE);
|
||||||
|
}
|
||||||
|
|
||||||
MOZ_ALWAYS_INLINE void
|
MOZ_ALWAYS_INLINE void
|
||||||
PLDHashTable::RawRemove(PLDHashEntryHdr* aEntry)
|
PLDHashTable::RawRemove(PLDHashEntryHdr* aEntry)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -527,6 +527,18 @@ PLDHashEntryHdr* PL_DHASH_FASTCALL
|
|||||||
PL_DHashTableOperate(PLDHashTable* aTable, const void* aKey,
|
PL_DHashTableOperate(PLDHashTable* aTable, const void* aKey,
|
||||||
PLDHashOperator aOp);
|
PLDHashOperator aOp);
|
||||||
|
|
||||||
|
/* Look up a key in table. */
|
||||||
|
PLDHashEntryHdr* PL_DHASH_FASTCALL
|
||||||
|
PL_DHashTableLookup(PLDHashTable* aTable, const void* aKey);
|
||||||
|
|
||||||
|
/* Add an entry identified by key to table. */
|
||||||
|
PLDHashEntryHdr* PL_DHASH_FASTCALL
|
||||||
|
PL_DHashTableAdd(PLDHashTable* aTable, const void* aKey);
|
||||||
|
|
||||||
|
/* Remove an entry identified by key from table. */
|
||||||
|
void PL_DHASH_FASTCALL
|
||||||
|
PL_DHashTableRemove(PLDHashTable* aTable, const void* aKey);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Remove an entry already accessed via LOOKUP or ADD.
|
* Remove an entry already accessed via LOOKUP or ADD.
|
||||||
*
|
*
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ static bool test_pldhash_grow_to_max_capacity()
|
|||||||
// Keep inserting elements until failure occurs because the table is full.
|
// Keep inserting elements until failure occurs because the table is full.
|
||||||
size_t numInserted = 0;
|
size_t numInserted = 0;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (!PL_DHashTableOperate(&t, (const void*)numInserted, PL_DHASH_ADD)) {
|
if (!PL_DHashTableAdd(&t, (const void*)numInserted)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
numInserted++;
|
numInserted++;
|
||||||
|
|||||||
Reference in New Issue
Block a user