37 char (*
Compare)(
void *, uint16_t,
void *, uint16_t),
void (*
Free)(
void *))
70 if (ht->
array == NULL) {
82 if (ht->
array != NULL)
100 while (hashbucket != NULL) {
102 if (ht->
Free != NULL)
105 hashbucket = next_hashbucket;
110 if (ht->
array != NULL)
118 printf(
"\n----------- Hash Table Stats ------------\n");
119 printf(
"Buckets: %" PRIu32
"\n", ht->
array_size);
120 printf(
"Hash function pointer: %p\n", ht->
Hash);
121 printf(
"-----------------------------------------\n");
126 if (ht == NULL || data == NULL)
129 uint32_t hash = ht->
Hash(ht, data, datalen);
143 if (ht->
array[hash] == NULL) {
144 ht->
array[hash] = hb;
147 ht->
array[hash] = hb;
167 uint32_t hash = ht->
Hash(ht, data, datalen);
171 if (ht->
array[hash] == NULL) {
193 if (ht->
Free != NULL)
197 ht->
array[hash] = NULL;
208 if (ht->
Compare(hashbucket->
data,hashbucket->
size,data,datalen) == 1) {
222 if (prev_hashbucket == NULL) {
231 if (ht->
Free != NULL)
237 prev_hashbucket = hashbucket;
239 }
while (hashbucket != NULL);
250 if (
SCMemcmp(data1,data2,len1) != 0)
264 uint32_t hash = ht->
Hash(ht, data, datalen);
266 if (ht->
array[hash] == NULL) {
273 return hashbucket->
data;
276 }
while (hashbucket != NULL);
283 uint8_t *d = (uint8_t *)data;
287 for (i = 0; i < datalen; i++) {
288 if (i == 0) hash += (((uint32_t)*d++));
289 else if (i == 1) hash += (((uint32_t)*d++) * datalen);
290 else hash *= (((uint32_t)*d++) * i) + datalen + i;
308 static int HashListTableTestInit01 (
void)
319 static int HashListTableTestInit02 (
void)
329 static int HashListTableTestInit03 (
void)
343 static int HashListTableTestInit04 (
void)
353 static int HashListTableTestAdd01 (
void)
371 static int HashListTableTestAdd02 (
void)
389 static int HashListTableTestAdd03 (
void)
401 printf(
"ht->listhead == NULL: ");
406 printf(
"ht->listtail == NULL: ");
417 static int HashListTableTestAdd04 (
void)
434 printf(
"htb == NULL: ");
440 printf(
"rp2 == NULL: ");
445 printf(
"rp != rp2: ");
456 static int HashListTableTestFull01 (
void)
482 static int HashListTableTestFull02 (
void)
512 UtRegisterTest(
"HashListTableTestInit01", HashListTableTestInit01);
513 UtRegisterTest(
"HashListTableTestInit02", HashListTableTestInit02);
514 UtRegisterTest(
"HashListTableTestInit03", HashListTableTestInit03);
515 UtRegisterTest(
"HashListTableTestInit04", HashListTableTestInit04);
522 UtRegisterTest(
"HashListTableTestFull01", HashListTableTestFull01);
523 UtRegisterTest(
"HashListTableTestFull02", HashListTableTestFull02);