2003/11/13 05:04:23
[org.ibex.core.git] / src / org / xwt / util / Cache.java
index 2822555..1f94414 100644 (file)
@@ -13,10 +13,19 @@ public class Cache extends Hash {
     Node mru = null;
     Node lru = null;
 
+    private int maxSize;
+    private Cache() { }
+    public Cache(int maxSize) {
+        super(maxSize * 2, 3);
+        this.maxSize = maxSize;
+    }
+
     /** A doubly-linked list */
     private class Node {
         final Object val;
-        public Node(Object val) { this.val = val; }
+        final Object k1;
+        final Object k2;
+        public Node(Object k1, Object k2, Object val) { this.k1 = k1; this.k2 = k2; this.val = val; }
         Node next = null;
         Node prev = null;
         void remove() {
@@ -65,7 +74,7 @@ public class Cache extends Hash {
     }
 
     public void put(Object k1, Object k2, Object v) {
-        Node n = new Node(v);
+        Node n = new Node(k1, k2, v);
         if (lru == null) {
             lru = mru = n;
         } else {
@@ -74,6 +83,7 @@ public class Cache extends Hash {
         }
         if (super.get(k1, k2) != null) remove(k1, k2);
         super.put(k1, k2, n);
+        if (size > maxSize) remove(lru.k1, lru.k2);
     }
 
 }