<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="Generator" content="Microsoft Exchange Server">
<!-- converted from rtf -->
<style><!-- .EmailQuote { margin-left: 1pt; padding-left: 4pt; border-left: #800000 2px solid; } --></style>
</head>
<body>
<font face="Arial, sans-serif" size="2">
<div>Hi,</div>
<div> </div>
<div>I'm trying to use the htable module, but experiencing some strange behaviors.</div>
<div>When I add an element with hash key 0 or 1 to the table, it does not get inserted to the table; only the element counter is increased.</div>
<div>Any idea what is going wrong? Test code below...</div>
<div> </div>
<div>Thanks.</div>
<div> </div>
<div>Kind Regards,</div>
<div>Zoltan.</div>
<div> </div>
<div>=====================================</div>
<div> </div>
<div>#include <stdio.h></div>
<div>#include <stdbool.h></div>
<div>#include "ccan/htable/htable.h"</div>
<div> </div>
<div>struct data {</div>
<div>  size_t key;</div>
<div>};</div>
<div> </div>
<div>static size_t hash(const void *e, void *unused) {</div>
<div>  struct data *d = (struct data *)e;</div>
<div> </div>
<div>  printf("Hash called.\n");</div>
<div>  return d->key;</div>
<div>}</div>
<div> </div>
<div>static bool eq(const void *e, void *k) {</div>
<div>  struct data *d = (struct data *)e;</div>
<div>  size_t *key = (size_t *)k;</div>
<div> </div>
<div>  printf("Eq called.\n");</div>
<div>  return (d->key == *key);</div>
<div>}</div>
<div> </div>
<div>int main(void) {</div>
<div>  struct htable *table;</div>
<div>  size_t key;</div>
<div> </div>
<div>  struct data *d0 = malloc(sizeof(struct data)); d0->key = 0;</div>
<div>  struct data *d1 = malloc(sizeof(struct data)); d1->key = 1;</div>
<div>  struct data *d2 = malloc(sizeof(struct data)); d2->key = 2;</div>
<div>  struct data *d3 = malloc(sizeof(struct data)); d3->key = 3;</div>
<div> </div>
<div> </div>
<div>  printf("\nTest1\n");</div>
<div>  table = malloc(sizeof(struct htable));</div>
<div>  htable_init(table, hash, NULL);</div>
<div> </div>
<div>  htable_add(table, d0->key, d0);</div>
<div>  htable_add(table, d1->key, d1);</div>
<div> </div>
<div>  printf("Elems: %d\n", table->elems);</div>
<div>  key = 0;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div>  key = 1;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div> </div>
<div> </div>
<div>  printf("\nTest2\n");</div>
<div>  table = malloc(sizeof(struct htable));</div>
<div>  htable_init(table, hash, NULL);</div>
<div> </div>
<div>  htable_add(table, d1->key, d1);</div>
<div>  htable_add(table, d0->key, d0);</div>
<div>  htable_add(table, d2->key, d2);</div>
<div> </div>
<div>  printf("Elems: %d\n", table->elems);</div>
<div>  key = 0;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div>  key = 1;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div>  key = 2;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div> </div>
<div> </div>
<div>  printf("\nTest3\n");</div>
<div>  table = malloc(sizeof(struct htable));</div>
<div>  htable_init(table, hash, NULL);</div>
<div> </div>
<div>  htable_add(table, d2->key, d2);</div>
<div>  htable_add(table, d3->key, d3);</div>
<div>  htable_add(table, d0->key, d0);</div>
<div> </div>
<div>  printf("Elems: %d\n", table->elems);</div>
<div>  key = 2;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div>  key = 3;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div>  key = 0;</div>
<div>  printf("Get %d: %zu\n", key, (size_t)htable_get(table, key, eq, &key));</div>
<div> </div>
<div>  return 0;</div>
<div>}</div>
<div> </div>
</font>
</body>
</html>