From 2d4cabdb7443e9961771abd265d7c8f434c01033 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Tue, 22 Nov 2016 19:21:16 -0800 Subject: [PATCH] fix broken use of iterator --- hashset.h | 5 ++++- planner.cc | 14 ++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/hashset.h b/hashset.h index c4274e2..ecda268 100644 --- a/hashset.h +++ b/hashset.h @@ -151,6 +151,10 @@ class HashSet { return NULL; } + _Key getFirstKey() { + return list->key; + } + bool contains(_Key key) { return table->get(key)!=NULL; } @@ -209,7 +213,6 @@ class HashSet { void operator delete[](void *p, size_t size) { _free(p); } - private: HashTable<_Key, LinkNode<_Key>*, _KeyInt, _Shift, _malloc, _calloc, _free, hash_function, equals> * table; LinkNode<_Key> *list; diff --git a/planner.cc b/planner.cc index 5ca24af..f832fb9 100644 --- a/planner.cc +++ b/planner.cc @@ -52,10 +52,11 @@ void Planner::addChange(MCChange *change) { } void Planner::processChanges() { - ChangeIterator *cit=changeset->iterator(); - for(;cit->hasNext();) { - MCChange *change=cit->next(); - cit->remove(); + while(!changeset->isEmpty()) { + MCChange *change=changeset->getFirstKey(); + if (change==NULL) + break; + changeset->remove(change); if (completedset->contains(change)) { delete change; continue; @@ -73,9 +74,10 @@ void Planner::processChanges() { } else ASSERT(false); completedset->add(change); } - delete cit; - for(cit=completedset->iterator();cit->hasNext();) { + ChangeIterator *cit=completedset->iterator(); + + for(;cit->hasNext();) { MCChange *change=cit->next(); cit->remove(); delete change; -- 2.34.1