/* -*-c-*-
*
- * $Id: assoc.c,v 1.1 2001/01/20 11:50:58 mdw Exp $
+ * $Id: assoc.c,v 1.4 2004/04/08 01:36:11 mdw Exp $
*
* Assocation tables
*
* MA 02111-1307, USA.
*/
-/*----- Revision history --------------------------------------------------*
- *
- * $Log: assoc.c,v $
- * 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.
- *
- */
-
/*----- Header files ------------------------------------------------------*/
#include "alloc.h"
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;