Index: third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
diff --git a/third_party/WebKit/Source/core/fetch/ResourceClientOrObserverWalker.h b/third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
similarity index 58% |
rename from third_party/WebKit/Source/core/fetch/ResourceClientOrObserverWalker.h |
rename to third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
index 24f55046ea33c88d02641156630106a080d0a197..3c91b3f85d94e73e4e2503057ba8c2becd27195f 100644 |
--- a/third_party/WebKit/Source/core/fetch/ResourceClientOrObserverWalker.h |
+++ b/third_party/WebKit/Source/core/fetch/ResourceClientWalker.h |
@@ -22,56 +22,47 @@ |
pages from the web. It has a memory cache for these objects. |
*/ |
-#ifndef ResourceClientOrObserverWalker_h |
-#define ResourceClientOrObserverWalker_h |
+#ifndef ResourceClientWalker_h |
+#define ResourceClientWalker_h |
#include "core/fetch/ResourceClient.h" |
+#include "platform/heap/Handle.h" |
#include "wtf/Allocator.h" |
-#include "wtf/HashCountedSet.h" |
-#include "wtf/Vector.h" |
namespace blink { |
// Call this "walker" instead of iterator so people won't expect Qt or STL-style iterator interface. |
// Just keep calling next() on this. It's safe from deletions of items. |
-// ClientOrObserver is either ResourceClient or ImageResourceObserver, so that |
-// this walker can be used both for ResourceClient and ImageResourceObserver. |
-template<typename ClientOrObserver, typename T> |
-class ResourceClientOrObserverWalker { |
+template <typename T> |
+class ResourceClientWalker { |
haraken
2016/08/12 10:45:20
I'd prefer removing this class in a follow-up CL i
yhirano
2016/08/16 08:57:24
Please see https://codereview.chromium.org/2191633
|
STACK_ALLOCATED(); |
public: |
- explicit ResourceClientOrObserverWalker(const HashCountedSet<ClientOrObserver*>& set) |
- : m_clientSet(set), m_clientVector(set.size()), m_index(0) |
+ explicit ResourceClientWalker(const HeapHashCountedSet<WeakMember<ResourceClient>>& set) |
+ : m_clientSet(set) |
{ |
- size_t clientIndex = 0; |
- for (const auto& resourceClient : set) |
- m_clientVector[clientIndex++] = resourceClient.key; |
+ m_clientVector.reserveCapacity(set.size()); |
+ for (const auto& keyvalue : set) |
+ m_clientVector.append(keyvalue.key); |
} |
T* next() |
{ |
size_t size = m_clientVector.size(); |
while (m_index < size) { |
- ClientOrObserver* next = m_clientVector[m_index++]; |
+ ResourceClient* next = m_clientVector[m_index++]; |
+ DCHECK(next); |
if (m_clientSet.contains(next)) { |
- ASSERT(T::isExpectedType(next)); |
+ DCHECK(T::isExpectedType(next)); |
return static_cast<T*>(next); |
} |
} |
- |
- return 0; |
+ return nullptr; |
} |
-private: |
- const HashCountedSet<ClientOrObserver*>& m_clientSet; |
- Vector<ClientOrObserver*> m_clientVector; |
- size_t m_index; |
-}; |
-template<typename T> |
-struct ResourceClientWalker : public ResourceClientOrObserverWalker<ResourceClient, T> { |
-public: |
- explicit ResourceClientWalker(const HashCountedSet<ResourceClient*>& set) |
- : ResourceClientOrObserverWalker<ResourceClient, T>(set) { } |
+private: |
+ const HeapHashCountedSet<WeakMember<ResourceClient>>& m_clientSet; |
+ HeapVector<Member<ResourceClient>> m_clientVector; |
+ size_t m_index = 0; |
}; |
} // namespace blink |