| Index: src/core/SkTDynamicHash.h | 
| diff --git a/src/core/SkTDynamicHash.h b/src/core/SkTDynamicHash.h | 
| index 0e34270e0b459765f705405e85106706c48a9a9d..c9a0b3ed01cfaa24cb3851f8fe9cd5c2125af2dd 100644 | 
| --- a/src/core/SkTDynamicHash.h | 
| +++ b/src/core/SkTDynamicHash.h | 
| @@ -12,10 +12,13 @@ | 
| #include "SkTemplates.h" | 
| #include "SkTypes.h" | 
|  | 
| +// Traits requires: | 
| +//   static const Key& GetKey(const T&) { ... } | 
| +//   static uint32_t Hash(const Key&) { ... } | 
| +// We'll look on T for these by default, or you can pass a custom Traits type. | 
| template <typename T, | 
| typename Key, | 
| -          const Key& (GetKey)(const T&), | 
| -          uint32_t (Hash)(const Key&), | 
| +          typename Traits = T, | 
| int kGrowPercent = 75>  // Larger -> more memory efficient, but slower. | 
| class SkTDynamicHash { | 
| public: | 
| @@ -227,6 +230,9 @@ private: | 
| return (index + round + 1) & this->hashMask(); | 
| } | 
|  | 
| +    static const Key& GetKey(const T& t) { return Traits::GetKey(t); } | 
| +    static uint32_t Hash(const Key& key) { return Traits::Hash(key); } | 
| + | 
| int fCount;     // Number of non Empty(), non Deleted() entries in fArray. | 
| int fDeleted;   // Number of Deleted() entries in fArray. | 
| int fCapacity;  // Number of entries in fArray.  Always a power of 2. | 
|  |