| Index: net/disk_cache/memory/mem_backend_impl.cc
|
| diff --git a/net/disk_cache/memory/mem_backend_impl.cc b/net/disk_cache/memory/mem_backend_impl.cc
|
| index e69c00edf636a45379a7f29db182512dd8a67c36..7df8b2e8504cba779bfc9296572389904fa8fb8e 100644
|
| --- a/net/disk_cache/memory/mem_backend_impl.cc
|
| +++ b/net/disk_cache/memory/mem_backend_impl.cc
|
| @@ -180,7 +180,7 @@ int MemBackendImpl::DoomEntriesSince(const base::Time initial_time,
|
| return net::ERR_FAILED;
|
| }
|
|
|
| -int MemBackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
|
| +int MemBackendImpl::OpenNextEntry(Iterator* iter, Entry** next_entry,
|
| const CompletionCallback& callback) {
|
| if (OpenNextEntry(iter, next_entry))
|
| return net::OK;
|
| @@ -188,10 +188,6 @@ int MemBackendImpl::OpenNextEntry(void** iter, Entry** next_entry,
|
| return net::ERR_FAILED;
|
| }
|
|
|
| -void MemBackendImpl::EndEnumeration(void** iter) {
|
| - *iter = NULL;
|
| -}
|
| -
|
| void MemBackendImpl::OnExternalCacheHit(const std::string& key) {
|
| EntryMap::iterator it = entries_.find(key);
|
| if (it != entries_.end()) {
|
| @@ -287,16 +283,29 @@ bool MemBackendImpl::DoomEntriesSince(const Time initial_time) {
|
| }
|
| }
|
|
|
| -bool MemBackendImpl::OpenNextEntry(void** iter, Entry** next_entry) {
|
| - MemEntryImpl* current = reinterpret_cast<MemEntryImpl*>(*iter);
|
| - MemEntryImpl* node = rankings_.GetNext(current);
|
| +bool MemBackendImpl::OpenNextEntry(Iterator* iter, Entry** next_entry) {
|
| + class State : public EnumerationState {
|
| + public:
|
| + State() : current_(NULL) {}
|
| +
|
| + MemEntryImpl* current() { return current_; }
|
| + void set_current(MemEntryImpl* current) { current_ = current; }
|
| +
|
| + private:
|
| + MemEntryImpl* current_;
|
| + };
|
| + if (!*iter)
|
| + iter->reset(new State());
|
| + State* state = static_cast<State*>(iter->get());
|
| +
|
| + MemEntryImpl* node = rankings_.GetNext(state->current());
|
| // We should never return a child entry so iterate until we hit a parent
|
| // entry.
|
| while (node && node->type() != MemEntryImpl::kParentEntry) {
|
| node = rankings_.GetNext(node);
|
| }
|
| *next_entry = node;
|
| - *iter = node;
|
| + state->set_current(node);
|
|
|
| if (node)
|
| node->Open();
|
|
|