| OLD | NEW |
| 1 | 1 |
| 2 /* | 2 /* |
| 3 * Copyright 2010 Google Inc. | 3 * Copyright 2010 Google Inc. |
| 4 * | 4 * |
| 5 * Use of this source code is governed by a BSD-style license that can be | 5 * Use of this source code is governed by a BSD-style license that can be |
| 6 * found in the LICENSE file. | 6 * found in the LICENSE file. |
| 7 */ | 7 */ |
| 8 | 8 |
| 9 | 9 |
| 10 | 10 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 27 * Key needs | 27 * Key needs |
| 28 * static bool EQ(const Entry&, const HashKey&); | 28 * static bool EQ(const Entry&, const HashKey&); |
| 29 * static bool LT(const Entry&, const HashKey&); | 29 * static bool LT(const Entry&, const HashKey&); |
| 30 * uint32_t getHash() const; | 30 * uint32_t getHash() const; |
| 31 * | 31 * |
| 32 * Allows duplicate key entries but on find you may get | 32 * Allows duplicate key entries but on find you may get |
| 33 * any of the duplicate entries returned. | 33 * any of the duplicate entries returned. |
| 34 */ | 34 */ |
| 35 template <typename T, typename Key, size_t kHashBits> class GrTHashTable { | 35 template <typename T, typename Key, size_t kHashBits> class GrTHashTable { |
| 36 public: | 36 public: |
| 37 GrTHashTable() { Gr_bzero(fHash, sizeof(fHash)); } | 37 GrTHashTable() { sk_bzero(fHash, sizeof(fHash)); } |
| 38 ~GrTHashTable() {} | 38 ~GrTHashTable() {} |
| 39 | 39 |
| 40 int count() const { return fSorted.count(); } | 40 int count() const { return fSorted.count(); } |
| 41 T* find(const Key&) const; | 41 T* find(const Key&) const; |
| 42 template <typename FindFuncType> T* find(const Key&, const FindFuncType&) c
onst; | 42 template <typename FindFuncType> T* find(const Key&, const FindFuncType&) c
onst; |
| 43 // return true if key was unique when inserted. | 43 // return true if key was unique when inserted. |
| 44 bool insert(const Key&, T*); | 44 bool insert(const Key&, T*); |
| 45 void remove(const Key&, const T*); | 45 void remove(const Key&, const T*); |
| 46 T* removeAt(int index, uint32_t hash); | 46 T* removeAt(int index, uint32_t hash); |
| 47 void removeAll(); | 47 void removeAll(); |
| (...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 203 } | 203 } |
| 204 // remove from our sorted array | 204 // remove from our sorted array |
| 205 T* elem = fSorted[elemIndex]; | 205 T* elem = fSorted[elemIndex]; |
| 206 fSorted.remove(elemIndex); | 206 fSorted.remove(elemIndex); |
| 207 return elem; | 207 return elem; |
| 208 } | 208 } |
| 209 | 209 |
| 210 template <typename T, typename Key, size_t kHashBits> | 210 template <typename T, typename Key, size_t kHashBits> |
| 211 void GrTHashTable<T, Key, kHashBits>::removeAll() { | 211 void GrTHashTable<T, Key, kHashBits>::removeAll() { |
| 212 fSorted.reset(); | 212 fSorted.reset(); |
| 213 Gr_bzero(fHash, sizeof(fHash)); | 213 sk_bzero(fHash, sizeof(fHash)); |
| 214 } | 214 } |
| 215 | 215 |
| 216 template <typename T, typename Key, size_t kHashBits> | 216 template <typename T, typename Key, size_t kHashBits> |
| 217 void GrTHashTable<T, Key, kHashBits>::deleteAll() { | 217 void GrTHashTable<T, Key, kHashBits>::deleteAll() { |
| 218 fSorted.deleteAll(); | 218 fSorted.deleteAll(); |
| 219 Gr_bzero(fHash, sizeof(fHash)); | 219 sk_bzero(fHash, sizeof(fHash)); |
| 220 } | 220 } |
| 221 | 221 |
| 222 template <typename T, typename Key, size_t kHashBits> | 222 template <typename T, typename Key, size_t kHashBits> |
| 223 void GrTHashTable<T, Key, kHashBits>::unrefAll() { | 223 void GrTHashTable<T, Key, kHashBits>::unrefAll() { |
| 224 fSorted.unrefAll(); | 224 fSorted.unrefAll(); |
| 225 Gr_bzero(fHash, sizeof(fHash)); | 225 sk_bzero(fHash, sizeof(fHash)); |
| 226 } | 226 } |
| 227 | 227 |
| 228 #ifdef SK_DEBUG | 228 #ifdef SK_DEBUG |
| 229 template <typename T, typename Key, size_t kHashBits> | 229 template <typename T, typename Key, size_t kHashBits> |
| 230 void GrTHashTable<T, Key, kHashBits>::validate() const { | 230 void GrTHashTable<T, Key, kHashBits>::validate() const { |
| 231 int count = fSorted.count(); | 231 int count = fSorted.count(); |
| 232 for (int i = 1; i < count; i++) { | 232 for (int i = 1; i < count; i++) { |
| 233 SkASSERT(Key::LT(*fSorted[i - 1], *fSorted[i]) || | 233 SkASSERT(Key::LT(*fSorted[i - 1], *fSorted[i]) || |
| 234 Key::EQ(*fSorted[i - 1], *fSorted[i])); | 234 Key::EQ(*fSorted[i - 1], *fSorted[i])); |
| 235 } | 235 } |
| 236 } | 236 } |
| 237 | 237 |
| 238 template <typename T, typename Key, size_t kHashBits> | 238 template <typename T, typename Key, size_t kHashBits> |
| 239 bool GrTHashTable<T, Key, kHashBits>::contains(T* elem) const { | 239 bool GrTHashTable<T, Key, kHashBits>::contains(T* elem) const { |
| 240 int index = fSorted.find(elem); | 240 int index = fSorted.find(elem); |
| 241 return index >= 0; | 241 return index >= 0; |
| 242 } | 242 } |
| 243 | 243 |
| 244 #endif | 244 #endif |
| 245 | 245 |
| 246 #endif | 246 #endif |
| OLD | NEW |