Add LruCache::Iterator

Required by libhwui

Change-Id: I164b9a4a82d89d132da01a56535c0df084de86f7
This commit is contained in:
Romain Guy 2012-11-28 18:26:54 -08:00
parent e402f1fde2
commit f1951df8a1

View File

@ -36,15 +36,38 @@ public:
void setOnEntryRemovedListener(OnEntryRemoved<TKey, TValue>* listener);
size_t size() const;
const TKey& keyAt(size_t index) const;
const TValue& valueAt(size_t index) const;
void removeAt(size_t index);
const TValue& get(const TKey& key);
bool put(const TKey& key, const TValue& value);
bool remove(const TKey& key);
bool removeOldest();
void clear();
class Iterator {
public:
Iterator(const LruCache<TKey, TValue>& cache): mCache(cache), mIndex(-1) {
}
bool next() {
mIndex = mCache.mTable->next(mIndex);
return mIndex != -1;
}
size_t index() const {
return mIndex;
}
const TValue& value() const {
return mCache.mTable->entryAt(mIndex).value;
}
const TKey& key() const {
return mCache.mTable->entryAt(mIndex).key;
}
private:
const LruCache<TKey, TValue>& mCache;
size_t mIndex;
};
private:
LruCache(const LruCache& that); // disallow copy constructor
@ -88,27 +111,6 @@ size_t LruCache<TKey, TValue>::size() const {
return mTable->size();
}
template <typename TKey, typename TValue>
const TKey& LruCache<TKey, TValue>::keyAt(size_t index) const {
const Entry& entry = mTable->entryAt(index);
return entry.key;
}
template <typename TKey, typename TValue>
const TValue& LruCache<TKey, TValue>::valueAt(size_t index) const {
const Entry& entry = mTable->entryAt(index);
return entry.value;
}
template <typename TKey, typename TValue>
void LruCache<TKey, TValue>::removeAt(size_t index) {
if (index < 0) {
return;
}
mTable->removeAt(index);
}
template <typename TKey, typename TValue>
const TValue& LruCache<TKey, TValue>::get(const TKey& key) {
hash_t hash = hash_type(key);