aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/gpu/GrBinHashKey.h
diff options
context:
space:
mode:
authorGravatar robertphillips <robertphillips@google.com>2014-07-20 09:40:00 -0700
committerGravatar Commit bot <commit-bot@chromium.org>2014-07-20 09:40:00 -0700
commit3d533ac917eaadf2fb3561f57d7266d8c0e665fd (patch)
treee1a710cf8756032da254ec484a4bb6128e61086d /src/gpu/GrBinHashKey.h
parent249171e7d29b5559f3eefe9dbd437030bfad3fda (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.h58
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).