Add additional functionality to Simplehash.
[repair.git] / Repair / RepairCompiler / MCC / Runtime / SimpleHash.h
index 50020d87d2d59328f4456a40974b5f7a4fd31a59..094c963d2c246e05c9e81706b0df6cf50a9d7cab 100755 (executable)
@@ -46,6 +46,7 @@ private:
 public:
     WorkList();
     ~WorkList();
+    void reset();
     void add(int id, int type, int lvalue, int rvalue);
     int hasMoreElements();
     int getid();
@@ -94,7 +95,8 @@ public:
         return numelements;
     }
     int count(int key);
-
+    void addAll(SimpleHash * set);
+    SimpleHash * imageSet(int key);
 };
 
 /* SimpleHashExcepion  *************************************************/
@@ -119,27 +121,29 @@ struct ArraySimple {
 class SimpleIterator {
  public:
 
-  struct ArraySimple *cur;
-  int index;
-  SimpleHash * table;
+  struct ArraySimple *cur, *tail;
+  int index,tailindex;
+  //  SimpleHash * table;
   inline SimpleIterator() {}
 
-  inline SimpleIterator(struct ArraySimple *start, SimpleHash *t) {
+  inline SimpleIterator(struct ArraySimple *start, struct ArraySimple *tl, int tlindex/*, SimpleHash *t*/) {
     cur = start;
-    table=t;
+    //    table=t;
     index=0;
+    tailindex=tlindex;
+    tail=tl;
   }
 
   inline int hasNext() {
+    if (cur==tail &&
+       index==tailindex)
+      return 0;
     while((index==ARRAYSIZE)||!cur->nodes[index].inuse) {
-      if (cur->nextarray==0 &&
-         index==table->tailindex)
-       return 0;
-      index++;
       if (index==ARRAYSIZE) {
        index=0;
        cur=cur->nextarray;
-      }
+      } else
+       index++;
     }
     if (cur->nodes[index].inuse)
       return 1;
@@ -168,11 +172,13 @@ class RepairHashNode {
     RepairHashNode *next;
     RepairHashNode *lnext;
     int data;
+    int data2;
     int setrelation;  
     int lvalue;  
     int rvalue;  
     int rule;
-    RepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data);
+    int ismodify;
+    RepairHashNode(int setrelation, int rule, int lvalue, int rvalue, int data, int data2,int ismodify);
 };
 
 class RepairHash {
@@ -189,10 +195,13 @@ public:
     ~RepairHash();
     int addset(int setv, int rule, int value, int data);
     int addrelation(int relation, int rule, int lvalue, int rvalue, int data);
+    int addrelation(int relation, int rule, int lvalue, int rvalue, int data, int data2);
     bool containsset(int setv, int rule, int value);
     bool containsrelation(int relation, int rule, int lvalue, int rvalue);
     int getset(int setv, int rule, int value);
     int getrelation(int relation, int rule, int lvalue, int rvalue);
+    int getrelation2(int relation, int rule, int lvalue, int rvalue);
+    int ismodify(int relation, int rule, int lvalue, int rvalue);
 };
 
 #endif