package org.archive.util.iterator;
import java.util.LinkedHashMap;
import java.util.Map;
public class CachingStringFilter implements StringFilter {
private LRUCache cache;
private StringFilter inner;
public CachingStringFilter(StringFilter inner, int max) {
this.inner = inner;
cache = new LRUCache(max);
}
public boolean isFiltered(String text) {
Boolean v = cache.remove(text);
if(v == null) {
v = inner.isFiltered(text);
}
cache.put(text, v);
return v;
}
public class LRUCache extends LinkedHashMap<String, Boolean> {
/** */
private static final long serialVersionUID = 1L;
private int max = 100;
public LRUCache(int max) {
this.max = max;
}
protected boolean removeEldestEntry(Map.Entry<String,Boolean> eldest) {
return (size() > max);
}
}
}