From: Lukas Sismis Date: Sat, 5 Oct 2024 18:27:19 +0000 (+0200) Subject: util-hash: add iterator for hash function X-Git-Tag: suricata-8.0.0-beta1~195 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2188cfca24d84857292f7ede1d2c4dddcf899510;p=thirdparty%2Fsuricata.git util-hash: add iterator for hash function --- 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);