static void HASHinfo(BAT *bk, BAT *bv, Hash *h, str s) { BUN i; BUN j; BUN k; BUN cnt[COLLISION + 1]; BUNappend(bk, pre(s, "type"), FALSE); BUNappend(bv, ATOMname(h->type),FALSE); BUNappend(bk, pre(s, "mask"), FALSE); BUNappend(bv, local_utoa(h->lim),FALSE); for (i = 0; i < COLLISION + 1; i++) { cnt[i] = 0; } for (i = 0; i <= h->mask; i++) { j = HASHlist(h, i); for (k = 0; j; k++) j >>= 1; cnt[k]++; } for (i = 0; i < COLLISION + 1; i++) if (cnt[i]) { BUNappend(bk, pre(s, local_utoa(i?(((size_t)1)<<(i-1)):0)), FALSE); BUNappend(bv, local_utoa((size_t) cnt[i]), FALSE); } }
main() { e1.key = "foo"; e1.data = ( char * )1; e2.key = "bar"; e2.data = ( char * )2; e3.key = "herschel"; e3.data = ( char * )3; t = HASHcreate( 100 ); e = HASHsearch( t, &e1, HASH_INSERT ); e = HASHsearch( t, &e2, HASH_INSERT ); e = HASHsearch( t, &e3, HASH_INSERT ); HASHlistinit( t, &he ); for( ;; ) { e = HASHlist( &he ); if( !e ) { exit( 0 ); } printf( "found key %s, data %d\n", e->key, ( int )e->data ); } }