From 37d19ee4dc354fe93198385bf6d0b5796252c5c5 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 2 Apr 2004 19:56:07 +0000 Subject: [PATCH] Changed iterator behavior...It only iterates over the items in the set at the iterators creation time. --- .../RepairCompiler/MCC/Runtime/SimpleHash.cc | 6 ++++-- Repair/RepairCompiler/MCC/Runtime/SimpleHash.h | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc b/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc index d420a1c..2f8370c 100755 --- a/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc +++ b/Repair/RepairCompiler/MCC/Runtime/SimpleHash.cc @@ -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) { diff --git a/Repair/RepairCompiler/MCC/Runtime/SimpleHash.h b/Repair/RepairCompiler/MCC/Runtime/SimpleHash.h index e1056f2..c55c255 100755 --- a/Repair/RepairCompiler/MCC/Runtime/SimpleHash.h +++ b/Repair/RepairCompiler/MCC/Runtime/SimpleHash.h @@ -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; -- 2.34.1