package com.mobilesorcery.sdk.core;
import java.util.LinkedHashMap;
import java.util.Map;
public class Cache<K, V> extends LinkedHashMap<K, V> {
private final int maxSize;
public Cache(int maxSize) {
this.maxSize = maxSize;
}
protected int maxSize() {
return maxSize;
}
@Override
protected boolean removeEldestEntry(Map.Entry<K, V> entry) {
boolean remove = size() > maxSize();
if (remove) {
onRemoval(entry.getKey(), entry.getValue());
}
return remove;
}
@Override
public void clear() {
for (Map.Entry<K, V> entry : entrySet()) {
onRemoval(entry.getKey(), entry.getValue());
}
super.clear();
}
/**
* Clients may override. Will be called after removal
* from cache.
* @param value
*/
protected void onRemoval(K key, V value) {
}
}