Added the Generic N-Tuple capability. Main File is MultiHash which uses Tuples interf...
authorlinsw <linsw>
Fri, 8 Apr 2011 19:24:31 +0000 (19:24 +0000)
committerlinsw <linsw>
Fri, 8 Apr 2011 19:24:31 +0000 (19:24 +0000)
Robust/src/Util/MultiHash.java [new file with mode: 0755]
Robust/src/Util/OptimizedView.java [new file with mode: 0755]
Robust/src/Util/Tuple.java [new file with mode: 0644]
Robust/src/Util/Tuples.java [new file with mode: 0755]

diff --git a/Robust/src/Util/MultiHash.java b/Robust/src/Util/MultiHash.java
new file mode 100755 (executable)
index 0000000..2d02d25
--- /dev/null
@@ -0,0 +1,120 @@
+import java.util.ArrayList;\r
+import java.util.HashSet;\r
+import java.util.Hashtable;\r
+import java.util.Set;\r
+\r
+public class MultiHash{\r
+       private int[]   views;\r
+       private Hashtable viewTable     = new Hashtable();\r
+\r
+       public MultiHash(){\r
+       }\r
+       \r
+       // Pass in the look up map\r
+       public MultiHash(int[] bitmapArray){\r
+               this.views      = bitmapArray;\r
+               for(int i = 0; i < views.length; i++){\r
+                       Hashtable ht = new Hashtable();\r
+                       viewTable.put(views[i], ht);\r
+               }\r
+       }\r
+\r
+       // For each view add it to its view hashtable\r
+       public void put(Tuples o){\r
+               // Tune the Tuple for each view and add it to its designated hashtable\r
+               for(int i = 0; i < views.length; i++){\r
+                       int tupleKey    = generateTupleKey(o, views[i]);\r
+                       Hashtable tuplesTable = (Hashtable) viewTable.get(views[i]);\r
+                       if(tuplesTable.containsKey(tupleKey)){\r
+                               Set tupleSet = (Set) tuplesTable.get(tupleKey);\r
+                               tupleSet.add(o);\r
+                       }else{\r
+                               Set tupleSet = new HashSet();\r
+                               tupleSet.add(o);\r
+                               tuplesTable.put(tupleKey, tupleSet);\r
+                       }\r
+               }\r
+       }\r
+\r
+       public int generateTupleKey(Tuples o, int viewIndex){\r
+               ArrayList<Integer> indices = findIndices(viewIndex);\r
+               ArrayList       obj     =       new ArrayList();\r
+               for(int i = 0; i < indices.size(); i++){\r
+                       obj.add(o.get(indices.get(i)));\r
+               }\r
+               return obj.hashCode()^29;\r
+       }\r
+\r
+       private ArrayList<Integer> findIndices(int viewIndex){\r
+               int mask = 1;\r
+               ArrayList<Integer> indices = new ArrayList<Integer>();\r
+               for(int i = 0; i < 31; i++){\r
+                       if((mask & viewIndex) != 0){\r
+                               indices.add(i);\r
+                       }\r
+                       mask = mask << 1;\r
+               }\r
+               return indices;\r
+       }\r
+\r
+       public Tuples get(int bitmap, Tuple o){\r
+               Tuples tuple = new Tuple(); //\r
+               int tupleKey    = generateTupleKey(o, bitmap);\r
+               Hashtable tuplesTable = (Hashtable) viewTable.get(bitmap);\r
+               if(tuplesTable.containsKey(tupleKey)){\r
+                       Set tupleSet = (Set) tuplesTable.get(tupleKey);\r
+                       tuple = convertToTuple(tupleSet);\r
+                       return tuple;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private Tuples convertToTuple(Set tupleSet){\r
+               Object[] tuples = tupleSet.toArray();\r
+               ArrayList o             = new ArrayList();\r
+               for(int i = 0; i < tuples.length; i++){\r
+                       o.add(tuples[i]);\r
+               }\r
+               Tuples tuple            = new Tuple(o);\r
+               return tuple;\r
+       }\r
+\r
+       public void remove(Tuples o){\r
+//             System.out.println("removed called"+viewTable.toString());\r
+               for(int i = 0; i < views.length; i++){\r
+                       int tupleKey    = generateTupleKey(o, views[i]);\r
+                       Hashtable tuplesTable = (Hashtable) viewTable.get(views[i]);\r
+                       if(tuplesTable.containsKey(tupleKey)){\r
+                               tuplesTable.remove(tupleKey);\r
+                       }else{\r
+                               System.out.println("Cannot find such key");\r
+                       }\r
+               }\r
+       }\r
+\r
+       public OptimizedView getOptimizedView(int bitMapView){\r
+               Hashtable tmp = (Hashtable) viewTable.get(bitMapView);\r
+               OptimizedView ov = new OptimizedView(bitMapView, tmp, this);\r
+               return ov;\r
+       }\r
+\r
+       /* Debug visualizations */\r
+       public void drawTierTwoTable(){\r
+               for(int i = 0; i < views.length; i++){\r
+                       Hashtable tmp = (Hashtable) viewTable.get(views[i]);\r
+                       System.out.println("Hashtable "+i+":\t"+tmp.keySet().toString());\r
+                       Object[] keySets = tmp.keySet().toArray();\r
+                       for(int j = 0; j < keySets.length; j++){\r
+                               System.out.println(tmp.get(keySets[j]));\r
+                       }\r
+               }\r
+       }\r
+       \r
+       public int[] getViews(){\r
+               return views;\r
+       }\r
+       \r
+       public Hashtable getTable(){\r
+               return viewTable;\r
+       }\r
+}\r
diff --git a/Robust/src/Util/OptimizedView.java b/Robust/src/Util/OptimizedView.java
new file mode 100755 (executable)
index 0000000..bd7cb42
--- /dev/null
@@ -0,0 +1,66 @@
+import java.util.ArrayList;\r
+import java.util.Hashtable;\r
+import java.util.Set;\r
+\r
+public class OptimizedView extends MultiHash\r
+{\r
+       private int bitMapView;\r
+       private Hashtable table;\r
+       private MultiHash parent;\r
+\r
+       public OptimizedView(int bitMapView, Hashtable table, MultiHash parent) {\r
+       this.bitMapView = bitMapView;\r
+       this.table              = table;\r
+       this.parent             = parent;\r
+    }\r
+\r
+       public void remove(Tuple o){\r
+               parent.remove(o);\r
+       }\r
+       public Tuples get(Tuples o){\r
+               Tuples tuple = new Tuple();\r
+\r
+               int tupleKey    = generateTupleKey(o);\r
+               if(table.containsKey(tupleKey)){\r
+                       Set tupleSet = (Set) table.get(tupleKey);\r
+                       tuple = convertToTuple(tupleSet);\r
+                       return tuple;\r
+               }\r
+               return null;\r
+       }\r
+\r
+       private Tuples convertToTuple(Set tupleSet){\r
+               Object[] tuples = tupleSet.toArray();\r
+               ArrayList o             = new ArrayList();\r
+               for(int i = 0; i < tuples.length; i++){\r
+                       o.add(tuples[i]);\r
+               }\r
+               Tuples tuple = new Tuple(o);\r
+               return tuple;\r
+       }\r
+\r
+       public int generateTupleKey(Tuples o){\r
+               ArrayList<Integer> indices = findIndices(bitMapView);\r
+               ArrayList       obj     =       new ArrayList();\r
+               for(int i = 0; i < indices.size(); i++){\r
+                       obj.add(o.get(indices.get(i)));\r
+               }\r
+               return obj.hashCode()^29;\r
+       }\r
+\r
+       private ArrayList<Integer> findIndices(int viewIndex){\r
+               int mask = 1;\r
+               ArrayList<Integer> indices = new ArrayList<Integer>();\r
+               for(int i = 0; i < 31; i++){\r
+                       if((mask & viewIndex) != 0){\r
+                               indices.add(i);\r
+                       }\r
+                       mask = mask << 1;\r
+               }\r
+               return indices;\r
+       }\r
+\r
+       public String toString(){\r
+               return table.toString();\r
+       }\r
+}\r
diff --git a/Robust/src/Util/Tuple.java b/Robust/src/Util/Tuple.java
new file mode 100644 (file)
index 0000000..2783f06
--- /dev/null
@@ -0,0 +1,41 @@
+import java.util.ArrayList;\r
+\r
+public class Tuple implements Tuples{\r
+       ArrayList o;\r
+\r
+       public Tuple(){\r
+               o = new ArrayList();\r
+       }\r
+\r
+       public Tuple(ArrayList o){\r
+               this.o = o;\r
+       }\r
+\r
+       public Object get(int i){\r
+               return o.get(i);\r
+       }\r
+\r
+       public void remove(int i){\r
+               o.remove(i);\r
+       }\r
+\r
+       public ArrayList getList(){\r
+               return o;\r
+       }\r
+\r
+       public int size(){\r
+               return o.size();\r
+       }\r
+\r
+       public int hashCode(){\r
+               return o.hashCode();\r
+       }\r
+\r
+       public String toString(){\r
+               String tmp="";\r
+               for(int i = 0; i < o.size(); i++){\r
+                       tmp += o.get(i)+" ";\r
+               }\r
+               return tmp;\r
+       }\r
+}\r
diff --git a/Robust/src/Util/Tuples.java b/Robust/src/Util/Tuples.java
new file mode 100755 (executable)
index 0000000..435f51d
--- /dev/null
@@ -0,0 +1,10 @@
+import java.util.ArrayList;\r
+\r
+public interface Tuples {\r
+    int size();\r
+    int hashCode();\r
+    void remove(int i);\r
+    ArrayList getList();\r
+       Object get(int i);\r
+       String toString();\r
+}
\ No newline at end of file