01: /*
02: * This file is part of PFIXCORE.
03: *
04: * PFIXCORE is free software; you can redistribute it and/or modify
05: * it under the terms of the GNU Lesser General Public License as published by
06: * the Free Software Foundation; either version 2 of the License, or
07: * (at your option) any later version.
08: *
09: * PFIXCORE is distributed in the hope that it will be useful,
10: * but WITHOUT ANY WARRANTY; without even the implied warranty of
11: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12: * GNU Lesser General Public License for more details.
13: *
14: * You should have received a copy of the GNU Lesser General Public License
15: * along with PFIXCORE; if not, write to the Free Software
16: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17: *
18: */
19:
20: package de.schlund.pfixxml.targets;
21:
22: import java.util.HashMap;
23: import java.util.Iterator;
24: import java.util.Map;
25:
26: import org.apache.oro.util.CacheLRU;
27:
28: public class LRUCache<T1, T2> implements SPCache<T1, T2> {
29: // private static final Logger LOG = Logger.getLogger(LRUCache.class);
30: public static final int DEFAULT_SIZE = 30;
31:
32: private CacheLRU cache;
33:
34: public LRUCache() {
35: // nothing to do
36: cache = new CacheLRU(DEFAULT_SIZE);
37: }
38:
39: public void createCache(int capacity) {
40: if (capacity <= 0)
41: capacity = DEFAULT_SIZE;
42: cache = new CacheLRU(capacity);
43: }
44:
45: @SuppressWarnings("unchecked")
46: public Iterator<T1> getIterator() {
47: Map<T1, T2> tmphash = new HashMap<T1, T2>();
48: synchronized (cache) {
49: for (Iterator<T1> iter = cache.keys(); iter.hasNext();) {
50: T1 k = iter.next();
51: tmphash.put(k, (T2) cache.getElement(k));
52: }
53: }
54: return tmphash.keySet().iterator();
55: }
56:
57: @SuppressWarnings("unchecked")
58: public T2 getValue(T1 key) {
59: T2 retval;
60: synchronized (cache) {
61: retval = (T2) cache.getElement(key);
62: }
63: return retval;
64: }
65:
66: public void setValue(T1 key, T2 value) {
67: // CAT.debug("*** LRU *** Setting " + key + " (free: " + cache.size() + "/" + cache.capacity() +")");
68: synchronized (cache) {
69: cache.addElement(key, value);
70: }
71: }
72:
73: public int getCapacity() {
74: return cache.capacity();
75: }
76:
77: public int getSize() {
78: return cache.size();
79: }
80: }
|