Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(847)

Side by Side Diff: base/containers/mru_cache.h

Issue 17106004: Add discardable memory emulation for non-android/mac platforms (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix MemoryAfterUnlock test Created 7 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file contains a template for a Most Recently Used cache that allows 5 // This file contains a template for a Most Recently Used cache that allows
6 // constant-time access to items using a key, but easy identification of the 6 // constant-time access to items using a key, but easy identification of the
7 // least-recently-used items for removal. Each key can only be associated with 7 // least-recently-used items for removal. Each key can only be associated with
8 // one payload item at a time. 8 // one payload item at a time.
9 // 9 //
10 // The key object will be stored twice, so it should support efficient copying. 10 // The key object will be stored twice, so it should support efficient copying.
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
116 return end(); 116 return end();
117 typename PayloadList::iterator iter = index_iter->second; 117 typename PayloadList::iterator iter = index_iter->second;
118 118
119 // Move the touched item to the front of the recency ordering. 119 // Move the touched item to the front of the recency ordering.
120 ordering_.splice(ordering_.begin(), ordering_, iter); 120 ordering_.splice(ordering_.begin(), ordering_, iter);
121 return ordering_.begin(); 121 return ordering_.begin();
122 } 122 }
123 123
124 // Retrieves the payload associated with a given key and returns it via 124 // Retrieves the payload associated with a given key and returns it via
125 // result without affecting the ordering (unlike Get). 125 // result without affecting the ordering (unlike Get).
126 //
127 // TODO(brettw) We may want a const version of this function in the future.
128 iterator Peek(const KeyType& key) { 126 iterator Peek(const KeyType& key) {
129 typename KeyIndex::const_iterator index_iter = index_.find(key); 127 typename KeyIndex::const_iterator index_iter = index_.find(key);
130 if (index_iter == index_.end()) 128 if (index_iter == index_.end())
131 return end(); 129 return end();
132 return index_iter->second; 130 return index_iter->second;
133 } 131 }
134 132
133 const_iterator Peek(const KeyType& key) const {
134 typename KeyIndex::const_iterator index_iter = index_.find(key);
135 if (index_iter == index_.end())
136 return end();
137 return index_iter->second;
138 }
139
135 // Erases the item referenced by the given iterator. An iterator to the item 140 // Erases the item referenced by the given iterator. An iterator to the item
136 // following it will be returned. The iterator must be valid. 141 // following it will be returned. The iterator must be valid.
137 iterator Erase(iterator pos) { 142 iterator Erase(iterator pos) {
138 deletor_(pos->second); 143 deletor_(pos->second);
139 index_.erase(pos->first); 144 index_.erase(pos->first);
140 return ordering_.erase(pos); 145 return ordering_.erase(pos);
141 } 146 }
142 147
143 // MRUCache entries are often processed in reverse order, so we add this 148 // MRUCache entries are often processed in reverse order, so we add this
144 // convenience function (not typically defined by STL containers). 149 // convenience function (not typically defined by STL containers).
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
296 virtual ~HashingMRUCache() { 301 virtual ~HashingMRUCache() {
297 } 302 }
298 303
299 private: 304 private:
300 DISALLOW_COPY_AND_ASSIGN(HashingMRUCache); 305 DISALLOW_COPY_AND_ASSIGN(HashingMRUCache);
301 }; 306 };
302 307
303 } // namespace base 308 } // namespace base
304 309
305 #endif // BASE_CONTAINERS_MRU_CACHE_H_ 310 #endif // BASE_CONTAINERS_MRU_CACHE_H_
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698