Add LruCache::Iterator

Required by libhwui

Change-Id: I164b9a4a82d89d132da01a56535c0df084de86f7
diff --git a/include/utils/LruCache.h b/include/utils/LruCache.h
index 937fe1e..302b929 100644
--- a/include/utils/LruCache.h
+++ b/include/utils/LruCache.h
@@ -36,15 +36,38 @@
 
     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
 
@@ -89,27 +112,6 @@
 }
 
 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);
     ssize_t index = mTable->find(-1, hash, key);