Bug 1432749 - Part 1: Add DefaultHasher for nsTString. r=smaug

Differential Revision: https://phabricator.services.mozilla.com/D67836

--HG--
extra : moz-landing-system : lando
This commit is contained in:
Tooru Fujisawa 2020-04-14 06:00:05 +00:00
parent 72e3388f74
commit 8c0843c04c
3 changed files with 33 additions and 14 deletions

View File

@ -11,6 +11,7 @@
#include "nsClassHashtable.h"
#include "nsComponentManagerUtils.h"
#include "nsTArray.h"
#include "nsTStringHasher.h" // mozilla::DefaultHasher<nsCString>
#include "nsZipArchive.h"
#include "nsITimer.h"
#include "nsIMemoryReporter.h"
@ -121,19 +122,6 @@ struct StartupCacheEntry {
};
};
struct nsCStringHasher {
using Key = nsCString;
using Lookup = nsCString;
static HashNumber hash(const Lookup& aLookup) {
return HashString(aLookup.get());
}
static bool match(const Key& aKey, const Lookup& aLookup) {
return aKey.Equals(aLookup);
}
};
// We don't want to refcount StartupCache, and ObserverService wants to
// refcount its listeners, so we'll let it refcount this instead.
class StartupCacheListener final : public nsIObserver {
@ -218,7 +206,7 @@ class StartupCache : public nsIMemoryReporter {
static void ThreadedWrite(void* aClosure);
static void ThreadedPrefetch(void* aClosure);
HashMap<nsCString, StartupCacheEntry, nsCStringHasher> mTable;
HashMap<nsCString, StartupCacheEntry> mTable;
// owns references to the contents of tables which have been invalidated.
// In theory grows forever if the cache is continually filled and then
// invalidated, but this should not happen in practice.

View File

@ -28,6 +28,7 @@ EXPORTS += [
'nsTLiteralString.h',
'nsTPromiseFlatString.h',
'nsTString.h',
'nsTStringHasher.h',
'nsTStringRepr.h',
'nsTSubstring.h',
'nsTSubstringTuple.h',

View File

@ -0,0 +1,30 @@
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=8 sts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef nsTStringHasher_h___
#define nsTStringHasher_h___
#include "mozilla/HashTable.h" // mozilla::{DefaultHasher, HashNumber, HashString}
namespace mozilla {
template <typename T>
struct DefaultHasher<nsTString<T>> {
using Key = nsTString<T>;
using Lookup = nsTString<T>;
static mozilla::HashNumber hash(const Lookup& aLookup) {
return mozilla::HashString(aLookup.get());
}
static bool match(const Key& aKey, const Lookup& aLookup) {
return aKey.Equals(aLookup);
}
};
} // namespace mozilla
#endif // !defined(nsTStringHasher_h___)