1 package org.shiftone.cache.policy.fifo; 2 3 4 5 import org.shiftone.cache.Cache; 6 7 8 12 public class RingFifoCache implements Cache 13 { 14 15 private final int maxSize; 16 private final int[] indexes; 17 private final Object [] keys; 18 private final Object [] values; 19 private int nextIndexIndex = 0; 20 21 public RingFifoCache(int maxSize) 22 { 23 24 this.maxSize = maxSize; 25 indexes = new int[maxSize]; 26 keys = new Object [maxSize]; 27 values = new Object [maxSize]; 28 } 29 30 31 private int getIndex(Object key) 32 { 33 return (key.hashCode() % maxSize); 34 } 35 36 37 public void addObject(Object userKey, Object cacheObject) 38 { 39 40 int index = getIndex(userKey); 41 42 indexes[nextIndexIndex] = index; 43 nextIndexIndex = (nextIndexIndex + 1) % maxSize; 44 keys[index] = userKey; 45 values[index] = cacheObject; 46 } 47 48 49 public Object getObject(Object key) 50 { 51 52 int index = getIndex(key); 53 Object k = keys[index]; 54 55 if ((k != null) && (k.equals(key))) 56 { 57 return values[index]; 58 } 59 60 return null; 61 } 62 63 64 public int size() 65 { 66 return 0; 67 } 68 69 70 public void remove(Object key) {} 71 72 73 public void clear() {} 74 } 75 | Popular Tags |