Chromium Code Reviews| Index: src/core/SkTDynamicHash.h |
| diff --git a/src/core/SkTDynamicHash.h b/src/core/SkTDynamicHash.h |
| index 4cb44204c85f61130354d25c78c7924249fe66f8..fc668166f9c8f72f8e15157729d3f1fda3686e56 100644 |
| --- a/src/core/SkTDynamicHash.h |
| +++ b/src/core/SkTDynamicHash.h |
| @@ -23,7 +23,6 @@ class SkTDynamicHash { |
| public: |
| SkTDynamicHash(int initialCapacity=64/sizeof(T*)) { |
| this->reset(SkNextPow2(initialCapacity > kMinCapacity ? initialCapacity : kMinCapacity)); |
| - SkASSERT(this->validate()); |
|
mtklein
2013/12/03 19:02:02
Let's put this guy back. This will never be expen
|
| } |
| ~SkTDynamicHash() { |
| @@ -53,57 +52,19 @@ public: |
| void add(T* newEntry) { |
| SkASSERT(NULL == this->find(GetKey(*newEntry))); |
| this->maybeGrow(); |
| - SkASSERT(this->validate()); |
| this->innerAdd(newEntry); |
| - SkASSERT(this->validate()); |
| } |
| // Remove the entry with this key. We reqire that an entry with this key is present. |
| void remove(const Key& key) { |
| SkASSERT(NULL != this->find(key)); |
| this->innerRemove(key); |
| - SkASSERT(this->validate()); |
| this->maybeShrink(); |
| - SkASSERT(this->validate()); |
| } |
| -protected: |
| - // These methods are used by tests only. |
| - |
| - int capacity() const { return fCapacity; } |
| - |
| - // How many collisions do we go through before finding where this entry should be inserted? |
| - int countCollisions(const Key& key) const { |
| - int index = this->firstIndex(key); |
| - for (int round = 0; round < fCapacity; round++) { |
| - const T* candidate = fArray[index]; |
| - if (Empty() == candidate || Deleted() == candidate || Equal(*candidate, key)) { |
| - return round; |
| - } |
| - index = this->nextIndex(index, round); |
| - } |
| - SkASSERT(0); // countCollisions: should be unreachable |
| - return -1; |
| - } |
| - |
| -private: |
| - // We have two special values to indicate an empty or deleted entry. |
| - static T* Empty() { return reinterpret_cast<T*>(0); } // i.e. NULL |
| - static T* Deleted() { return reinterpret_cast<T*>(1); } // Also an invalid pointer. |
| - |
| - static T** AllocArray(int capacity) { |
| - return (T**)sk_calloc_throw(sizeof(T*) * capacity); // All cells == Empty(). |
| - } |
| - |
| - void reset(int capacity) { |
| - fCount = 0; |
| - fDeleted = 0; |
| - fCapacity = capacity; |
| - fArray = AllocArray(fCapacity); |
| - } |
| - |
| - bool validate() const { |
| - #define SKTDYNAMICHASH_CHECK(x) SkASSERT((x)); if (!(x)) return false |
| +#ifdef SK_DEBUG |
|
mtklein
2013/12/03 19:02:02
This is a little nit, but let's just move the #ifd
|
| + void validate() const { |
| + #define SKTDYNAMICHASH_CHECK(x) SkASSERT((x)); if (!(x)) return |
|
mtklein
2013/12/03 19:02:02
If we're guarding by SK_DEBUG, we can just use SkA
|
| // Is capacity sane? |
| SKTDYNAMICHASH_CHECK(SkIsPow2(fCapacity)); |
| @@ -150,7 +111,44 @@ private: |
| } |
| } |
| #undef SKTDYNAMICHASH_CHECK |
| - return true; |
| + } |
| +#else |
| + void validate() const { } |
| +#endif |
| + |
| +protected: |
| + // These methods are used by tests only. |
|
mtklein
2013/12/03 19:02:02
Can we now pull validate() down here too?
|
| + |
| + int capacity() const { return fCapacity; } |
| + |
| + // How many collisions do we go through before finding where this entry should be inserted? |
| + int countCollisions(const Key& key) const { |
| + int index = this->firstIndex(key); |
| + for (int round = 0; round < fCapacity; round++) { |
| + const T* candidate = fArray[index]; |
| + if (Empty() == candidate || Deleted() == candidate || Equal(*candidate, key)) { |
| + return round; |
| + } |
| + index = this->nextIndex(index, round); |
| + } |
| + SkASSERT(0); // countCollisions: should be unreachable |
| + return -1; |
| + } |
| + |
| +private: |
| + // We have two special values to indicate an empty or deleted entry. |
| + static T* Empty() { return reinterpret_cast<T*>(0); } // i.e. NULL |
| + static T* Deleted() { return reinterpret_cast<T*>(1); } // Also an invalid pointer. |
| + |
| + static T** AllocArray(int capacity) { |
| + return (T**)sk_calloc_throw(sizeof(T*) * capacity); // All cells == Empty(). |
| + } |
| + |
| + void reset(int capacity) { |
| + fCount = 0; |
| + fDeleted = 0; |
| + fCapacity = capacity; |
| + fArray = AllocArray(fCapacity); |
| } |
| void innerAdd(T* newEntry) { |