Add another ifndef and a couple of methods to LruCache

The new methods on LruCache are needed by libhwui to manage
the cache of paths.

Change-Id: If54fa325c54e2b04e7fe5dfe6dad66066c40127c
diff --git a/include/utils/JenkinsHash.h b/include/utils/JenkinsHash.h
index e964e6f..7da5dbd 100644
--- a/include/utils/JenkinsHash.h
+++ b/include/utils/JenkinsHash.h
@@ -19,6 +19,9 @@
  * should still be quite good.
  **/
 
+#ifndef ANDROID_JENKINS_HASH_H
+#define ANDROID_JENKINS_HASH_H
+
 #include <utils/TypeHelpers.h>
 
 namespace android {
@@ -42,3 +45,4 @@
 
 }
 
+#endif // ANDROID_JENKINS_HASH_H
diff --git a/include/utils/LruCache.h b/include/utils/LruCache.h
index 2a70d76..937fe1e 100644
--- a/include/utils/LruCache.h
+++ b/include/utils/LruCache.h
@@ -36,6 +36,9 @@
 
     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);
@@ -86,6 +89,27 @@
 }
 
 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);