sql_hash_e* hash_add(sql_hash *h, int key, void *value) { sql_hash_e *e = SA_ZNEW(h->sa, sql_hash_e); e->chain = h->buckets[key&(h->size-1)]; h->buckets[key&(h->size-1)] = e; e->key = key; e->value = value; return e; }
list * list_new(sql_allocator *sa, fdestroy destroy) { list *l = (sa)?SA_ZNEW(sa, list):ZNEW(list); l->sa = sa; l->destroy = destroy; l->h = l->t = NULL; l->cnt = 0; l->ht = NULL; MT_lock_init(&l->ht_lock, "sa_ht_lock"); return l; }
sql_hash * hash_new(sql_allocator *sa, int size, fkeyvalue key) { int i; sql_hash *ht = SA_ZNEW(sa, sql_hash); ht->sa = sa; ht->size = (1<<log_base2(size-1)); ht->key = key; ht->buckets = SA_NEW_ARRAY(sa, sql_hash_e*, ht->size); for(i = 0; i < ht->size; i++) ht->buckets[i] = NULL; return ht; }