Some usability ideas around SkTHash.
- By default, use new SkGoodHash to hash keys, which is:
* for 4 byte values, use SkChecksum::Mix,
* for SkStrings, use SkChecksum::Murmur3 on the data,
* for other structs, shallow hash the struct with Murmur3.
- Expand SkChecksum::Murmur3 to support non-4-byte-aligned data.
- Add const foreach() methods.
- Have foreach() take a functor, which allows lambdas.
BUG=skia:
Review URL: https://codereview.chromium.org/1021033002
diff --git a/tests/ChecksumTest.cpp b/tests/ChecksumTest.cpp
index 6248678..3658bd7 100644
--- a/tests/ChecksumTest.cpp
+++ b/tests/ChecksumTest.cpp
@@ -50,3 +50,16 @@
}
}
}
+
+DEF_TEST(GoodHash, r) {
+ ASSERT(SkGoodHash(( int32_t)4) == 614249093); // 4 bytes. Hits SkChecksum::Mix fast path.
+ ASSERT(SkGoodHash((uint32_t)4) == 614249093); // (Ditto)
+
+ // None of these are 4 byte sized, so they use SkChecksum::Murmur3, not SkChecksum::Mix.
+ ASSERT(SkGoodHash((uint64_t)4) == 3491892518);
+ ASSERT(SkGoodHash((uint16_t)4) == 899251846);
+ ASSERT(SkGoodHash( (uint8_t)4) == 962700458);
+
+ // Tests SkString is correctly specialized.
+ ASSERT(SkGoodHash(SkString("Hi")) == 55667557);
+}