package com.ctc.wstx.util;
import java.util.*;
Simple Map implementation usable for caches where contents do not
expire, but where size needs to remain bounded.
Note: we probably should use weak references, or something similar
to limit maximum memory usage. This could be implemented in many
ways, perhaps by using two areas: first, smaller one, with strong
refs, and secondary bigger one that uses soft references.
/**
* Simple Map implementation usable for caches where contents do not
* expire, but where size needs to remain bounded.
*<p>
* Note: we probably should use weak references, or something similar
* to limit maximum memory usage. This could be implemented in many
* ways, perhaps by using two areas: first, smaller one, with strong
* refs, and secondary bigger one that uses soft references.
*/
public final class SimpleCache<K,V>
{
final LimitMap<K,V> mItems;
final int mMaxSize;
public SimpleCache(int maxSize)
{
mItems = new LimitMap<K,V>(maxSize);
mMaxSize = maxSize;
}
public V find(K key) {
return mItems.get(key);
}
public void add(K key, V value)
{
mItems.put(key, value);
}
/*
/////////////////////////////////////////////
// Helper classes
/////////////////////////////////////////////
*/
@SuppressWarnings("serial")
final static class LimitMap<K,V>
extends LinkedHashMap<K,V>
{
final int mMaxSize;
public LimitMap(int size)
{
super(size, 0.8f, true);
// Let's not allow silly low values...
mMaxSize = size;
}
@Override
public boolean removeEldestEntry(Map.Entry<K,V> eldest) {
return (size() >= mMaxSize);
}
}
}