1 5 package org.h2.util; 6 7 import java.sql.SQLException ; 8 import java.util.HashMap ; 9 import java.util.Iterator ; 10 11 import org.h2.message.Message; 12 13 public class SmallMap { 14 private HashMap map = new HashMap (); 15 private Object cache; 16 private int cacheId; 17 private int lastId; 18 private int maxElements; 19 20 public SmallMap(int maxElements) { 21 this.maxElements = maxElements; 22 } 23 24 public int addObject(int id, Object o) { 25 if(map.size() > maxElements * 2) { 26 Iterator it = map.keySet().iterator(); 27 while(it.hasNext()) { 28 Integer k = (Integer ) it.next(); 29 if(k.intValue() + maxElements < lastId) { 30 it.remove(); 31 } 32 } 33 } 34 if(id > lastId) { 35 lastId = id; 36 } 37 map.put(new Integer (id), o); 38 cacheId = id; 39 cache = o; 40 return id; 41 } 42 43 public void freeObject(int id) { 44 if (cacheId == id) { 45 cacheId = -1; 46 cache = null; 47 } 48 map.remove(new Integer (id)); 49 } 50 51 public Object getObject(int id, boolean ifAvailable) throws SQLException { 52 if (id == cacheId) { 53 return cache; 54 } 55 Object obj = map.get(new Integer (id)); 56 if(obj == null && !ifAvailable) { 57 throw Message.getSQLException(Message.OBJECT_CLOSED); 58 } 59 return obj; 60 } 61 62 } 63 | Popular Tags |