/* -*-c-*-
*
- * $Id: assoc.c,v 1.1 2001/01/20 11:50:58 mdw Exp $
+ * $Id: assoc.c,v 1.3 2001/01/25 21:12:38 mdw Exp $
*
* Assocation tables
*
/*----- Revision history --------------------------------------------------*
*
* $Log: assoc.c,v $
+ * Revision 1.3 2001/01/25 21:12:38 mdw
+ * Use @ATOM_HASH@ rather than digging in the @atom@ structure.
+ *
+ * Revision 1.2 2001/01/21 19:04:59 mdw
+ * Fix bugs.
+ *
* Revision 1.1 2001/01/20 11:50:58 mdw
* Hash tables indexed by atoms, to avoid expense of hashing keys on each
* lookup, and to reduce storage used by key texts.
for (;;) {
hash_base *p;
HASH_NEXT(&i, p);
+ if (!p)
+ break;
x_free(t->t.a, p);
}
hash_destroy(&t->t);
void *assoc_find(assoc_table *t, atom *a, size_t sz, unsigned *f)
{
- hash_base **bin = HASH_BIN(&t->t, a->b.b.hash), **p;
+ hash_base **bin = HASH_BIN(&t->t, ATOM_HASH(a)), **p;
assoc_base *q;
/* --- Try to find the association --- */
/* --- Make a new assoication --- */
q = x_alloc(t->t.a, sz);
+ q->a = a;
q->b.next = *bin;
q->b.hash = ATOM_HASH(a);
*bin = &q->b;