From 2188cfca24d84857292f7ede1d2c4dddcf899510 Mon Sep 17 00:00:00 2001 From: Lukas Sismis Date: Sat, 5 Oct 2024 20:27:19 +0200 Subject: [PATCH] util-hash: add iterator for hash function --- src/util-hash.c | 15 +++++++++++++++ src/util-hash.h | 1 + 2 files changed, 16 insertions(+) diff --git a/src/util-hash.c b/src/util-hash.c index ea04f2d7bb..bdfc1c6f74 100644 --- a/src/util-hash.c +++ b/src/util-hash.c @@ -208,6 +208,21 @@ void *HashTableLookup(HashTable *ht, void *data, uint16_t datalen) return NULL; } +// CallbackFn is an iterator, first argument is the data, second is user auxilary data +void HashTableIterate(HashTable *ht, void (*CallbackFn)(void *, void *), void *aux) +{ + if (ht == NULL || CallbackFn == NULL) + return; + + for (uint32_t i = 0; i < ht->array_size; i++) { + HashTableBucket *hashbucket = ht->array[i]; + while (hashbucket != NULL) { + CallbackFn(hashbucket->data, aux); + hashbucket = hashbucket->next; + } + } +} + uint32_t HashTableGenericHash(HashTable *ht, void *data, uint16_t datalen) { uint8_t *d = (uint8_t *)data; diff --git a/src/util-hash.h b/src/util-hash.h index ec96f5bcac..40241b3db7 100644 --- a/src/util-hash.h +++ b/src/util-hash.h @@ -51,6 +51,7 @@ void HashTableFree(HashTable *); int HashTableAdd(HashTable *, void *, uint16_t); int HashTableRemove(HashTable *, void *, uint16_t); void *HashTableLookup(HashTable *, void *, uint16_t); +void HashTableIterate(HashTable *ht, void (*CallbackFn)(void *, void *), void *aux); uint32_t HashTableGenericHash(HashTable *, void *, uint16_t); char HashTableDefaultCompare(void *, uint16_t, void *, uint16_t); -- 2.47.2