Bug 999575 - Add an already_AddRefed<> Put method for nsRefPtrHashtable. r=froydnj

This commit is contained in:
Andrew McCreight 2014-05-09 09:49:52 -07:00
parent 2c74dd94c9
commit 9165f062b7

View File

@ -50,6 +50,13 @@ public:
*/
RefPtr* GetWeak(KeyType aKey, bool* aFound = nullptr) const;
// Overload Put, rather than overriding it.
using base_type::Put;
void Put(KeyType aKey, already_AddRefed<RefPtr> aData);
bool Put(KeyType aKey, already_AddRefed<RefPtr> aData, const mozilla::fallible_t&) MOZ_WARN_UNUSED_RESULT;
// Overload Remove, rather than overriding it.
using base_type::Remove;
@ -136,6 +143,32 @@ nsRefPtrHashtable<KeyClass,RefPtr>::GetWeak
return nullptr;
}
template<class KeyClass, class RefPtr>
void
nsRefPtrHashtable<KeyClass,RefPtr>::Put(KeyType aKey, already_AddRefed<RefPtr> aData)
{
if (!Put(aKey, mozilla::Move(aData), mozilla::fallible_t())) {
NS_ABORT_OOM(this->mTable.entrySize * this->mTable.entryCount);
}
}
template<class KeyClass, class RefPtr>
bool
nsRefPtrHashtable<KeyClass,RefPtr>::Put(KeyType aKey,
already_AddRefed<RefPtr> aData,
const mozilla::fallible_t&)
{
typename base_type::EntryType* ent = this->PutEntry(aKey);
if (!ent) {
return false;
}
ent->mData = aData;
return true;
}
template<class KeyClass, class RefPtr>
bool
nsRefPtrHashtable<KeyClass,RefPtr>::Remove(KeyType aKey,