]> git.sur5r.net Git - cc65/commitdiff
Fix errors in tracking the number of items in the table. Added function
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 21 Aug 2011 16:56:40 +0000 (16:56 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 21 Aug 2011 16:56:40 +0000 (16:56 +0000)
HT_GetCount to retrieve the number of items.

git-svn-id: svn://svn.cc65.org/cc65/trunk@5248 b7a2c559-68d2-44c3-8de9-860c34a00d81

src/common/hashtab.c
src/common/hashtab.h

index 965ee867c122da997738bc2fc543bd9d22be427d..376e26a28e3fc768b7e78b27dd218d035d358a88 100644 (file)
@@ -194,6 +194,7 @@ void HT_Remove (HashTable* T, void* Entry)
         if (*Q == N) {
             /* Found - remove it */
             *Q = N->Next;
+            --T->Count;
             break;
         }
         /* Next node */
@@ -235,6 +236,7 @@ void HT_Walk (HashTable* T, int (*F) (void* Entry, void* Data), void* Data)
             if (F (*Cur, Data)) {
                 /* Delete the node from the chain */
                 *Cur = Next;
+                --T->Count;
             } else {
                 /* Next node in chain */
                 Cur = &(*Cur)->Next;
index f4a4ba3cba3d8883d4c4343616bc833cd135dc02..0543ac087ef9daa085b00d435dce0a1249bf58c5 100644 (file)
@@ -139,6 +139,16 @@ INLINE HashTable* NewHashTable (unsigned Slots, const HashFunctions* Func)
 void FreeHashTable (HashTable* T);
 /* Free a hash table. Note: This will not free the entries in the table! */
 
+#if defined(HAVE_INLINE)
+INLINE unsigned HT_GetCount (const HashTable* T)
+/* Return the number of items in the table. */
+{
+    return T->Count;
+}
+#else
+#define HT_GetCount(T)  ((T)->Count)
+#endif
+
 HashNode* HT_FindHash (const HashTable* T, const void* Key, unsigned Hash);
 /* Find the node with the given key. Differs from HT_Find in that the hash
  * for the key is precalculated and passed to the function.