Index: chrome/browser/android/thumbnail/lru_expiring_cache.h |
diff --git a/chrome/browser/android/thumbnail/lru_expiring_cache.h b/chrome/browser/android/thumbnail/lru_expiring_cache.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..e4f35c1864e8328263b4a9e2775d33636ae7143b |
--- /dev/null |
+++ b/chrome/browser/android/thumbnail/lru_expiring_cache.h |
@@ -0,0 +1,63 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef CHROME_BROWSER_ANDROID_THUMBNAIL_LRU_EXPIRING_CACHE_H_ |
+#define CHROME_BROWSER_ANDROID_THUMBNAIL_LRU_EXPIRING_CACHE_H_ |
+ |
+#include "net/base/linked_hash_map.h" |
+ |
+template <class Key, class Value> |
+class LRUExpiringCache { |
+ private: |
+ typedef linked_hash_map<Key, Value> LinkedHashMap; |
+ |
+ public: |
+ typedef typename LinkedHashMap::iterator iterator; |
+ |
+ explicit LRUExpiringCache(size_t max_cache_size) |
+ : max_cache_size_(max_cache_size) {} |
+ |
+ ~LRUExpiringCache() {} |
+ |
+ void Put(const Key& key, const Value& value) { |
+ map_[key] = value; |
+ EvictIfFull(); |
+ } |
+ |
+ Value& Get(const Key& key) { |
+ DCHECK(Contains(key)); |
+ iterator iter = map_.find(key); |
+ return iter->second; |
+ } |
+ |
+ bool Contains(const Key& key) const { |
+ return map_.find(key) != map_.end(); |
+ } |
+ |
+ void Remove(const Key& key) { |
+ map_.erase(key); |
+ } |
+ |
+ void Clear() { map_.clear(); } |
+ |
+ iterator begin() { return map_.begin(); } |
+ iterator end() { return map_.end(); } |
+ size_t MaximumCacheSize() const { return max_cache_size_; } |
+ size_t size() const { return map_.size(); } |
+ |
+ private: |
+ void EvictIfFull() { |
+ while (map_.size() > max_cache_size_) { |
+ iterator it = map_.begin(); |
+ map_.erase(it); |
+ } |
+ } |
+ |
+ size_t max_cache_size_; |
+ LinkedHashMap map_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(LRUExpiringCache); |
+}; |
+ |
+#endif // CHROME_BROWSER_ANDROID_THUMBNAIL_LRU_EXPIRING_CACHE_H_ |