diff -r 000000000000 -r 6474c204b198 mobile/android/base/util/NonEvictingLruCache.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobile/android/base/util/NonEvictingLruCache.java Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,44 @@ +/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.gecko.util; + +import android.support.v4.util.LruCache; + +import java.util.concurrent.ConcurrentHashMap; + +/** + * An LruCache that also supports a set of items that will never be evicted. + * + * Alas, LruCache is final, so we compose rather than inherit. + */ +public class NonEvictingLruCache { + private final ConcurrentHashMap permanent = new ConcurrentHashMap(); + private final LruCache evictable; + + public NonEvictingLruCache(final int evictableSize) { + evictable = new LruCache(evictableSize); + } + + public V get(K key) { + V val = permanent.get(key); + if (val == null) { + return evictable.get(key); + } + return val; + } + + public void putWithoutEviction(K key, V value) { + permanent.put(key, value); + } + + public void put(K key, V value) { + evictable.put(key, value); + } + + public void evictAll() { + evictable.evictAll(); + } +}