X-Git-Url: https://git.distorted.org.uk/~mdw/mLib/blobdiff_plain/dcda594451ecd4d8ba699da3e4cc3c723f31b538..78b1464e4a78dc364ecc8aebcfd5ec13b3f6bb07:/assoc.c diff --git a/assoc.c b/assoc.c index 26fe2c9..b8f5df0 100644 --- a/assoc.c +++ b/assoc.c @@ -1,6 +1,6 @@ /* -*-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 * @@ -30,6 +30,12 @@ /*----- 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. @@ -77,6 +83,8 @@ void assoc_destroy(assoc_table *t) for (;;) { hash_base *p; HASH_NEXT(&i, p); + if (!p) + break; x_free(t->t.a, p); } hash_destroy(&t->t); @@ -103,7 +111,7 @@ void assoc_destroy(assoc_table *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 --- */ @@ -127,6 +135,7 @@ void *assoc_find(assoc_table *t, atom *a, size_t sz, unsigned *f) /* --- 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;