Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / android / thumbnail / scoped_ptr_expiring_cache.h
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_ANDROID_THUMBNAIL_SCOPED_PTR_EXPIRING_CACHE_H_
6 #define CHROME_BROWSER_ANDROID_THUMBNAIL_SCOPED_PTR_EXPIRING_CACHE_H_
7
8 #include "base/memory/scoped_ptr.h"
9 #include "net/base/linked_hash_map.h"
10
11 template <class Key, class Value>
12 class ScopedPtrExpiringCache {
13  private:
14   typedef linked_hash_map<Key, Value*> LinkedHashMap;
15
16  public:
17   typedef typename LinkedHashMap::iterator iterator;
18
19   explicit ScopedPtrExpiringCache(size_t max_cache_size)
20       : max_cache_size_(max_cache_size) {}
21
22   ~ScopedPtrExpiringCache() {}
23
24   void Put(const Key& key, scoped_ptr<Value> value) {
25     Remove(key);
26     map_[key] = value.release();
27     EvictIfFull();
28   }
29
30   Value* Get(const Key& key) {
31     iterator iter = map_.find(key);
32     if (iter != map_.end())
33       return iter->second;
34     return NULL;
35   }
36
37   void Remove(const Key& key) {
38     iterator iter = map_.find(key);
39     if (iter != map_.end()) {
40       delete iter->second;
41       map_.erase(key);
42     }
43   }
44
45   void Clear() {
46     for (iterator iter = map_.begin(); iter != map_.end(); iter++) {
47       delete iter->second;
48     }
49     map_.clear();
50   }
51
52   iterator begin() { return map_.begin(); }
53   iterator end() { return map_.end(); }
54   size_t MaximumCacheSize() const { return max_cache_size_; }
55   size_t size() const { return map_.size(); }
56
57  private:
58   void EvictIfFull() {
59     while (map_.size() > max_cache_size_) {
60       iterator it = map_.begin();
61       delete it->second;
62       map_.erase(it);
63     }
64   }
65
66   size_t max_cache_size_;
67   LinkedHashMap map_;
68
69   DISALLOW_COPY_AND_ASSIGN(ScopedPtrExpiringCache);
70 };
71
72 #endif  // CHROME_BROWSER_ANDROID_THUMBNAIL_SCOPED_PTR_EXPIRING_CACHE_H_