1 // Copyright 2003 Adam Megacz, see the COPYING file for licensing [GPL]
7 * A Hash table with a fixed size; drops extraneous elements. Uses
10 public class Cache extends Hash {
12 /** head of list is the mru; tail is the lru */
16 /** A doubly-linked list */
19 public Node(Object val) { this.val = val; }
23 if (this == lru) lru = prev;
24 if (this == mru) mru = next;
25 if (next != null) next.prev = prev;
26 if (prev != null) prev.next = next;
29 void placeAfter(Node n) {
31 if (n == null) return;
33 if (n.next != null) n.next.prev = this;
37 void placeBefore(Node n) {
39 if (n == null) return;
43 if (prev != null) prev.next = this;
52 public void remove(Object k1, Object k2) {
53 Object o = super.get(k1, k2);
54 if (o != null) ((Node)o).remove();
58 public Object get(Object k1, Object k2) {
59 Node n = (Node)super.get(k1, k2);
60 if (n == null) return null;
67 public void put(Object k1, Object k2, Object v) {
75 if (super.get(k1, k2) != null) remove(k1, k2);