switch to spaces only..
[IRC.git] / Robust / src / Util / OptimizedView.java
1 import java.util.ArrayList;\r
2 import java.util.Hashtable;\r
3 import java.util.Set;\r
4 \r
5 public class OptimizedView extends MultiHash\r
6 {\r
7   private int bitMapView;\r
8   private Hashtable table;\r
9   private MultiHash parent;\r
10 \r
11   public OptimizedView(int bitMapView, Hashtable table, MultiHash parent) {\r
12     this.bitMapView = bitMapView;\r
13     this.table              = table;\r
14     this.parent             = parent;\r
15   }\r
16 \r
17   public void remove(Tuple o) {\r
18     parent.remove(o);\r
19   }\r
20   public Tuples get(Tuples o) {\r
21     Tuples tuple = new Tuple();\r
22 \r
23     int tupleKey    = generateTupleKey(o);\r
24     if(table.containsKey(tupleKey)) {\r
25       Set tupleSet = (Set) table.get(tupleKey);\r
26       tuple = convertToTuple(tupleSet);\r
27       return tuple;\r
28     }\r
29     return null;\r
30   }\r
31 \r
32   private Tuples convertToTuple(Set tupleSet) {\r
33     Object[] tuples = tupleSet.toArray();\r
34     ArrayList o             = new ArrayList();\r
35     for(int i = 0; i < tuples.length; i++) {\r
36       o.add(tuples[i]);\r
37     }\r
38     Tuples tuple = new Tuple(o);\r
39     return tuple;\r
40   }\r
41 \r
42   public int generateTupleKey(Tuples o) {\r
43     ArrayList<Integer> indices = findIndices(bitMapView);\r
44     ArrayList obj     =       new ArrayList();\r
45     for(int i = 0; i < indices.size(); i++) {\r
46       obj.add(o.get(indices.get(i)));\r
47     }\r
48     return obj.hashCode()^29;\r
49   }\r
50 \r
51   private ArrayList<Integer> findIndices(int viewIndex) {\r
52     int mask = 1;\r
53     ArrayList<Integer> indices = new ArrayList<Integer>();\r
54     for(int i = 0; i < 31; i++) {\r
55       if((mask & viewIndex) != 0) {\r
56         indices.add(i);\r
57       }\r
58       mask = mask << 1;\r
59     }\r
60     return indices;\r
61   }\r
62 \r
63   public String toString() {\r
64     return table.toString();\r
65   }\r
66 }\r