Added the Generic N-Tuple capability. Main File is MultiHash which uses Tuples interf...
[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