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

Unified Diff: base/containers/mru_cache.h

Issue 1763273002: base: Remove OwningMRUCache in favor of scoped_ptrs in MRUCache (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase + fix Created 4 years, 9 months 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 side-by-side diff with in-line comments
Download patch
Index: base/containers/mru_cache.h
diff --git a/base/containers/mru_cache.h b/base/containers/mru_cache.h
index d9e648728f679aba68b46db65b2c66a40c9db9cd..6c1d6260f55b26168a736b5d09a72e34f0644a16 100644
--- a/base/containers/mru_cache.h
+++ b/base/containers/mru_cache.h
@@ -41,12 +41,9 @@ struct MRUCacheStandardMap {
};
// Base class for the MRU cache specializations defined below.
-// The deletor will get called on all payloads that are being removed or
-// replaced.
template <class KeyType,
class PayloadType,
class HashOrCompareType,
- class DeletorType,
template <typename, typename, typename> class MapType =
MRUCacheStandardMap>
class MRUCacheBase {
@@ -75,18 +72,9 @@ class MRUCacheBase {
// a new item is inserted. If the caller wants to manager this itself (for
// example, maybe it has special work to do when something is evicted), it
// can pass NO_AUTO_EVICT to not restrict the cache size.
- explicit MRUCacheBase(size_type max_size) : max_size_(max_size) {
- }
-
- MRUCacheBase(size_type max_size, const DeletorType& deletor)
- : max_size_(max_size), deletor_(deletor) {
- }
+ explicit MRUCacheBase(size_type max_size) : max_size_(max_size) {}
- virtual ~MRUCacheBase() {
- iterator i = begin();
- while (i != end())
- i = Erase(i);
- }
+ virtual ~MRUCacheBase() {}
size_type max_size() const { return max_size_; }
@@ -94,14 +82,14 @@ class MRUCacheBase {
// the same key, it is removed prior to insertion. An iterator indicating the
// inserted item will be returned (this will always be the front of the list).
//
- // The payload will be copied. In the case of an OwningMRUCache, this function
- // will take ownership of the pointer.
- iterator Put(const KeyType& key, const PayloadType& payload) {
+ // The payload will be forwarded.
+ template <typename Payload>
+ iterator Put(const KeyType& key, Payload&& payload) {
// Remove any existing payload with that key.
typename KeyIndex::iterator index_iter = index_.find(key);
if (index_iter != index_.end()) {
- // Erase the reference to it. This will call the deletor on the removed
- // element. The index reference will be replaced in the code below.
+ // Erase the reference to it. The index reference will be replaced in the
+ // code below.
Erase(index_iter->second);
} else if (max_size_ != NO_AUTO_EVICT) {
// New item is being inserted which might make it larger than the maximum
@@ -109,7 +97,7 @@ class MRUCacheBase {
ShrinkToSize(max_size_ - 1);
}
- ordering_.push_front(value_type(key, payload));
+ ordering_.push_front(value_type(key, std::forward<Payload>(payload)));
index_.insert(std::make_pair(key, ordering_.begin()));
return ordering_.begin();
}
@@ -150,14 +138,12 @@ class MRUCacheBase {
void Swap(MRUCacheBase& other) {
ordering_.swap(other.ordering_);
index_.swap(other.index_);
- std::swap(deletor_, other.deletor_);
std::swap(max_size_, other.max_size_);
}
// Erases the item referenced by the given iterator. An iterator to the item
// following it will be returned. The iterator must be valid.
iterator Erase(iterator pos) {
- deletor_(pos->second);
index_.erase(pos->first);
return ordering_.erase(pos);
}
@@ -180,9 +166,6 @@ class MRUCacheBase {
// Deletes everything from the cache.
void Clear() {
- for (typename PayloadList::iterator i(ordering_.begin());
- i != ordering_.end(); ++i)
- deletor_(i->second);
index_.clear();
ordering_.clear();
}
@@ -219,83 +202,28 @@ class MRUCacheBase {
size_type max_size_;
- DeletorType deletor_;
-
DISALLOW_COPY_AND_ASSIGN(MRUCacheBase);
};
// MRUCache --------------------------------------------------------------------
-// A functor that does nothing. Used by the MRUCache.
-template<class PayloadType>
-class MRUCacheNullDeletor {
- public:
- void operator()(const PayloadType& payload) {}
-};
-
// A container that does not do anything to free its data. Use this when storing
// value types (as opposed to pointers) in the list.
template <class KeyType, class PayloadType>
-class MRUCache : public MRUCacheBase<KeyType,
- PayloadType,
- std::less<KeyType>,
- MRUCacheNullDeletor<PayloadType>> {
+class MRUCache : public MRUCacheBase<KeyType, PayloadType, std::less<KeyType>> {
private:
- typedef MRUCacheBase<KeyType,
- PayloadType,
- std::less<KeyType>,
- MRUCacheNullDeletor<PayloadType>>
- ParentType;
+ using ParentType = MRUCacheBase<KeyType, PayloadType, std::less<KeyType>>;
public:
// See MRUCacheBase, noting the possibility of using NO_AUTO_EVICT.
explicit MRUCache(typename ParentType::size_type max_size)
- : ParentType(max_size) {
- }
- virtual ~MRUCache() {
- }
+ : ParentType(max_size) {}
+ virtual ~MRUCache() {}
private:
DISALLOW_COPY_AND_ASSIGN(MRUCache);
};
-// OwningMRUCache --------------------------------------------------------------
-
-template<class PayloadType>
-class MRUCachePointerDeletor {
- public:
- void operator()(const PayloadType& payload) { delete payload; }
-};
-
-// A cache that owns the payload type, which must be a non-const pointer type.
-// The pointers will be deleted when they are removed, replaced, or when the
-// cache is destroyed.
-// TODO(vmpstr): This should probably go away in favor of storing scoped_ptrs.
-template <class KeyType, class PayloadType>
-class OwningMRUCache
- : public MRUCacheBase<KeyType,
- PayloadType,
- std::less<KeyType>,
- MRUCachePointerDeletor<PayloadType>> {
- private:
- typedef MRUCacheBase<KeyType,
- PayloadType,
- std::less<KeyType>,
- MRUCachePointerDeletor<PayloadType>>
- ParentType;
-
- public:
- // See MRUCacheBase, noting the possibility of using NO_AUTO_EVICT.
- explicit OwningMRUCache(typename ParentType::size_type max_size)
- : ParentType(max_size) {
- }
- virtual ~OwningMRUCache() {
- }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(OwningMRUCache);
-};
-
// HashingMRUCache ------------------------------------------------------------
template <class KeyType, class ValueType, class HashType>
@@ -307,26 +235,17 @@ struct MRUCacheHashMap {
// the map type instead of std::map. Note that your KeyType must be hashable to
// use this cache or you need to provide a hashing class.
template <class KeyType, class PayloadType, class HashType = std::hash<KeyType>>
-class HashingMRUCache : public MRUCacheBase<KeyType,
- PayloadType,
- HashType,
- MRUCacheNullDeletor<PayloadType>,
- MRUCacheHashMap> {
+class HashingMRUCache
+ : public MRUCacheBase<KeyType, PayloadType, HashType, MRUCacheHashMap> {
private:
- typedef MRUCacheBase<KeyType,
- PayloadType,
- HashType,
- MRUCacheNullDeletor<PayloadType>,
- MRUCacheHashMap>
- ParentType;
+ using ParentType =
+ MRUCacheBase<KeyType, PayloadType, HashType, MRUCacheHashMap>;
public:
// See MRUCacheBase, noting the possibility of using NO_AUTO_EVICT.
explicit HashingMRUCache(typename ParentType::size_type max_size)
- : ParentType(max_size) {
- }
- virtual ~HashingMRUCache() {
- }
+ : ParentType(max_size) {}
+ virtual ~HashingMRUCache() {}
private:
DISALLOW_COPY_AND_ASSIGN(HashingMRUCache);
« no previous file with comments | « no previous file | base/containers/mru_cache_unittest.cc » ('j') | chrome/browser/bitmap_fetcher/bitmap_fetcher_service.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698