Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7f32b1da authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Add LruCache::Iterator"

parents 2b556bc9 f1951df8
Loading
Loading
Loading
Loading
+26 −24
Original line number Diff line number Diff line
@@ -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);