/* -*- 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(); } }