diff options
author | 2014-07-20 09:40:00 -0700 | |
---|---|---|
committer | 2014-07-20 09:40:00 -0700 | |
commit | 3d533ac917eaadf2fb3561f57d7266d8c0e665fd (patch) | |
tree | e1a710cf8756032da254ec484a4bb6128e61086d /src/gpu/GrBinHashKey.h | |
parent | 249171e7d29b5559f3eefe9dbd437030bfad3fda (diff) |
Replace GrTHash with SkTDynamicHash
Mike: SkTDynamicHash changes
Brian: Ganesh changes
This removes three instances of GrTHash leaving the ones in GrTextStrike.h
R=mtklein@google.com, bsalomon@google.com
Author: robertphillips@google.com
Review URL: https://codereview.chromium.org/402693003
Diffstat (limited to 'src/gpu/GrBinHashKey.h')
-rw-r--r-- | src/gpu/GrBinHashKey.h | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/src/gpu/GrBinHashKey.h b/src/gpu/GrBinHashKey.h index 585a1a1c01..06ff931808 100644 --- a/src/gpu/GrBinHashKey.h +++ b/src/gpu/GrBinHashKey.h @@ -10,9 +10,67 @@ #ifndef GrBinHashKey_DEFINED #define GrBinHashKey_DEFINED +#include "SkChecksum.h" #include "GrTypes.h" /** + * GrMurmur3HashKey is a hash key class that can take a data chunk of any predetermined + * length. It uses the Murmur3 hash function. It is intended to be used with + * SkTDynamicHash (where GrBinHashKey is for GrTHashTable). + */ +template<size_t KEY_SIZE_IN_BYTES> +class GrMurmur3HashKey { +public: + GrMurmur3HashKey() { + this->reset(); + } + + void reset() { + fHash = 0; +#ifdef SK_DEBUG + fIsValid = false; +#endif + } + + void setKeyData(const uint32_t* data) { + SK_COMPILE_ASSERT(KEY_SIZE_IN_BYTES % 4 == 0, key_size_mismatch); + memcpy(fData, data, KEY_SIZE_IN_BYTES); + + fHash = SkChecksum::Murmur3(fData, KEY_SIZE_IN_BYTES); +#ifdef SK_DEBUG + fIsValid = true; +#endif + } + + bool operator==(const GrMurmur3HashKey& other) const { + if (fHash != other.fHash) { + return false; + } + + return !memcmp(fData, other.fData, KEY_SIZE_IN_BYTES); + } + + uint32_t getHash() const { + SkASSERT(fIsValid); + return fHash; + } + + const uint8_t* getData() const { + SkASSERT(fIsValid); + return reinterpret_cast<const uint8_t*>(fData); + } + +private: + uint32_t fHash; + uint32_t fData[KEY_SIZE_IN_BYTES / sizeof(uint32_t)]; // Buffer for key storage. + +#ifdef SK_DEBUG +public: + bool fIsValid; +#endif +}; + +/** * GrBinHashKey is a hash key class that can take a data chunk of any predetermined * length. The hash function used is the One-at-a-Time Hash * (http://burtleburtle.net/bob/hash/doobs.html). |