Changed iterator behavior...It only iterates over the items in the set
authorbdemsky <bdemsky>
Fri, 2 Apr 2004 19:56:07 +0000 (19:56 +0000)
committerbdemsky <bdemsky>
Fri, 2 Apr 2004 19:56:07 +0000 (19:56 +0000)
at the iterators creation time.

Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc
Repair/RepairCompiler/MCC/Runtime/SimpleHash.h

index d420a1c3934481809934c67d073c10c117be9010..2f8370c5e3f2817f82ef9dba982b1addf32b5799 100755 (executable)
@@ -137,13 +137,15 @@ void WorkList::add(int id,int type, int lvalue, int rvalue) {
 
 /* SIMPLE HASH ********************************************************/
 SimpleIterator* SimpleHash::iterator() {
-  return new SimpleIterator(listhead,this);
+  return new SimpleIterator(listhead,listtail,tailindex/*,this*/);
 }
 
 void SimpleHash::iterator(SimpleIterator & it) {
-  it.table=this;
+  //  it.table=this;
   it.cur=listhead;
   it.index=0;
+  it.tailindex=tailindex;
+  it.tail=listtail;
 }
 
 SimpleHash::SimpleHash(int size) {
index e1056f2c5a05b5bc210427b2f8ac0dfe62fec95d..c55c2558002808979d321ec987cc7ec41365f2b0 100755 (executable)
@@ -119,22 +119,24 @@ 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;
       if (index==ARRAYSIZE) {
        index=0;
        cur=cur->nextarray;