diff options
| author | 2026-03-24 11:58:57 +0100 | |
|---|---|---|
| committer | 2026-03-24 11:58:57 +0100 | |
| commit | 1052ca3657db6d1237c75899211617feda933ea5 (patch) | |
| tree | c45186d4a76d78f986a6f40965155049ed3824ce | |
| parent | 5c209b4df903c5f71cdc8320adbb34f1499f9232 (diff) | |
get rid of imap (was only used for mem2reg, no longer)
| -rw-r--r-- | src/antcc.h | 27 | ||||
| -rw-r--r-- | src/u_mem.c | 84 |
2 files changed, 0 insertions, 111 deletions
diff --git a/src/antcc.h b/src/antcc.h index b467156..72ded43 100644 --- a/src/antcc.h +++ b/src/antcc.h @@ -247,33 +247,6 @@ void vresize_(struct vecbase *, uint siz, uint N); #define vpushn(v, xs, N) vpushn_(&(v)->_vb, sizeof *(v)->p, xs, N) #define vresize(v, N) vresize_(&(v)->_vb, sizeof *(v)->p, N) -/** map of short -> T **/ -#define imap_of(T) struct { T *v; int tmp; struct imapbase mb; } -struct imapbase { short *k; BitSet *bs; uint n, N; }; - -void imap_init_(struct imapbase *, void **v, uint vsiz, uint N); -int imap_get_(struct imapbase *, short k); -int imap_set_(struct imapbase *, void **v, uint vsiz, short k); -#define imap_free(m) (free((m)->mb.k), memset((m), 0, sizeof *(m))) -#define imap_init(m, N) (imap_free(m), imap_init_(&(m)->mb, (void **)&(m)->v, sizeof*(m)->v, (N))) -#define imap_clear(m) ((m)->mb.bs ? bszero((m)->mb.bs, BSSIZE((m)->mb.N)) : (void)0, \ - (m)->mb.n = 0) -#define imap_get(m, k) ((m)->tmp = imap_get_(&(m)->mb, k), (m)->tmp < 0 ? NULL : &(m)->v[(m)->tmp]) -#define imap_set(m, k, ...) ((m)->tmp = imap_set_(&(m)->mb, (void **)&(m)->v, sizeof*(m)->v, k), \ - (m)->v[(m)->tmp] = (__VA_ARGS__), &(m)->v[(m)->tmp]) -#define imap_each(m,kx,pvx) \ - for (int _i = 0; _i < (m)->mb.N && ((kx) = (m)->mb.k[_i], (pvx) = &(m)->v[_i], 1); ++_i) \ - if (bstest((m)->mb.bs, _i)) -#define imap_copy(dst,src) do { \ - size_t N = (src)->mb.N; \ - if (!N) break; \ - (dst)->mb.n = (src)->mb.n; \ - imap_init((dst), N); \ - memcpy((dst)->mb.k, (src)->mb.k, \ - N*(sizeof*(src)->mb.k + sizeof*(src)->v) + BSSIZE(N)*sizeof(BitSet)); \ -} while (0) - - /** map of non-null ptr -> T **/ #define pmap_of(T) struct { T *v; int tmp; struct pmapbase mb; } struct pmapbase { void **k; uint n, N; }; diff --git a/src/u_mem.c b/src/u_mem.c index ec01433..257652d 100644 --- a/src/u_mem.c +++ b/src/u_mem.c @@ -210,90 +210,6 @@ freearena(Arena **par) } } -/** integer hashmap **/ -void -imap_init_(struct imapbase *m, void **v, uint vsiz, uint N) -{ - uint sizk = N*sizeof*m->k, - sizv = N*vsiz, - sizbs = BSSIZE(N)*sizeof(BitSet); - - assert(ispo2(N)); - m->k = xcalloc(sizk + sizv + sizbs); - *v = (char *)m->k + sizk; - m->bs = (BitSet *)((char *)*v + sizv); - m->N = N; -} - -int -imap_get_(struct imapbase *m, short k) -{ - if (!m->N) return -1; - for (int i = k;; ++i) { - bool notempty = bstest(m->bs, i &= m->N - 1); - if (bstest(m->bs, i) && m->k[i] == k) return i; - if (!notempty) return -1; - } -} - -static void -imap_rehash(struct imapbase *m, void **v, uint vsiz) -{ - short *newk, k; - int i, j; - void *newv; - BitSet *newbs; - uint N2 = m->N ? m->N << 1 : 16, - sizk = N2*sizeof*m->k, - sizv = N2*vsiz, - sizbs = BSSIZE(N2)*sizeof(BitSet); - - assert(N2); - newk = xcalloc(sizk + sizv + sizbs); - memset(newk, 0, sizk + sizv + sizbs); - newv = (char *)newk + sizk; - newbs = (BitSet *)((char *)newv + sizv); - for (i = 0; i < m->N; ++i) { - if (!bstest(m->bs, i)) - continue; - j = k = m->k[i]; - for (;; ++j) { - j &= N2 - 1; - if (!bstest(newbs, j)) { - bsset(newbs, j); - newk[j] = k; - memcpy((char *)newv + j*vsiz, (char *)*v + i*vsiz, vsiz); - break; - } - } - } - free(m->k); - m->k = newk; - *v = newv; - m->bs = newbs; - m->N = N2; -} - -int -imap_set_(struct imapbase *m, void **v, uint vsiz, short k) -{ - if (m->n >= m->N/4*3 /*load factor 75*/) { - imap_rehash(m, v, vsiz); - assert(m->n < m->N); - } - for (int i = k;; ++i) { - bool notempty = bstest(m->bs, i &= m->N - 1); - if (notempty && m->k[i] == k) - return i; - if (!notempty) { - m->k[i] = k; - bsset(m->bs, i); - ++m->n; - return i; - } - } -} - /** pointer hashmap **/ void pmap_init_(struct pmapbase *m, void **v, uint vsiz, uint N) |