From ded70873bc6dcb7a46df89dde56d27a0523635f2 Mon Sep 17 00:00:00 2001 From: James Clark Date: Wed, 10 Dec 1997 21:57:16 +0000 Subject: [PATCH] Add iterators --- expat/xmlparse/hashtable.c | 17 +++++++++++++++++ expat/xmlparse/hashtable.h | 7 +++++++ 2 files changed, 24 insertions(+) diff --git a/expat/xmlparse/hashtable.c b/expat/xmlparse/hashtable.c index b3e82124..88686933 100755 --- a/expat/xmlparse/hashtable.c +++ b/expat/xmlparse/hashtable.c @@ -87,3 +87,20 @@ void hashTableInit(HASH_TABLE *p) p->used = 0; p->v = 0; } + +void hashTableIterInit(HASH_TABLE_ITER *iter, const HASH_TABLE *table) +{ + iter->p = table->v; + iter->end = iter->p + table->size; +} + +NAMED *hashTableIterNext(HASH_TABLE_ITER *iter) +{ + while (iter->p != iter->end) { + NAMED *tem = *(iter->p)++; + if (tem) + return tem; + } + return 0; +} + diff --git a/expat/xmlparse/hashtable.h b/expat/xmlparse/hashtable.h index 78ccb1f0..697cbce6 100755 --- a/expat/xmlparse/hashtable.h +++ b/expat/xmlparse/hashtable.h @@ -16,3 +16,10 @@ NAMED *lookup(HASH_TABLE *table, const char *name, size_t createSize); void hashTableInit(HASH_TABLE *); void hashTableDestroy(HASH_TABLE *); +typedef struct { + NAMED **p; + NAMED **end; +} HASH_TABLE_ITER; + +void hashTableIterInit(HASH_TABLE_ITER *, const HASH_TABLE *); +NAMED *hashTableIterNext(HASH_TABLE_ITER *);