KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > h2 > util > SmallMap


1 /*
2  * Copyright 2004-2006 H2 Group. Licensed under the H2 License, Version 1.0 (http://h2database.com/html/license.html).
3  * Initial Developer: H2 Group
4  */

5 package org.h2.util;
6
7 import java.sql.SQLException JavaDoc;
8 import java.util.HashMap JavaDoc;
9 import java.util.Iterator JavaDoc;
10
11 import org.h2.message.Message;
12
13 public class SmallMap {
14     private HashMap JavaDoc map = new HashMap JavaDoc();
15     private Object JavaDoc 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 JavaDoc o) {
25         if(map.size() > maxElements * 2) {
26             Iterator JavaDoc it = map.keySet().iterator();
27             while(it.hasNext()) {
28                 Integer JavaDoc k = (Integer JavaDoc) 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 JavaDoc(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 JavaDoc(id));
49     }
50
51     public Object JavaDoc getObject(int id, boolean ifAvailable) throws SQLException JavaDoc {
52         if (id == cacheId) {
53             return cache;
54         }
55         Object JavaDoc obj = map.get(new Integer JavaDoc(id));
56         if(obj == null && !ifAvailable) {
57             throw Message.getSQLException(Message.OBJECT_CLOSED);
58         }
59         return obj;
60     }
61     
62 }
63
Popular Tags