From ee0174001b385944c6a2b3b1fb6ba861613cb4f7 Mon Sep 17 00:00:00 2001 From: Bruce Hill Date: Sun, 26 Sep 2021 12:57:04 -0700 Subject: Minor cleanups --- definitions.c | 2 +- match.c | 41 ++++++++++++++++++----------------------- pattern.c | 4 ++-- 3 files changed, 21 insertions(+), 26 deletions(-) diff --git a/definitions.c b/definitions.c index a18de54..590a801 100644 --- a/definitions.c +++ b/definitions.c @@ -46,7 +46,7 @@ def_t *free_defs(def_t *defs, def_t *stop) while (defs != stop && defs != NULL) { def_t *next = defs->next; defs->next = NULL; - free(defs); + delete(&defs); defs = next; } return defs; diff --git a/match.c b/match.c index 788e9f7..874f60a 100644 --- a/match.c +++ b/match.c @@ -109,7 +109,7 @@ static inline size_t hash(const char *str, pat_t *pat) // static bool cache_get(cache_t *cache, def_t *defs, const char *str, pat_t *pat, match_t **result) { - if (!cache->matches) return NULL; + if (!cache->matches) return false; size_t h = hash(str, pat) & (cache->size-1); for (match_t *c = cache->matches[h]; c; c = c->cache.next) { if (c->pat == pat && c->defs_id == (defs?defs->id:0) && c->start == str) { @@ -159,20 +159,18 @@ static void cache_save(cache_t *cache, def_t *defs, const char *str, pat_t *pat, cache->matches = new(match_t*[cache->size]); // Rehash: - if (old_matches) { - for (size_t i = 0; i < old_size; i++) { - for (match_t *o; (o = old_matches[i]); ) { - *o->cache.home = o->cache.next; - if (o->cache.next) o->cache.next->cache.home = o->cache.home; - size_t h = hash(o->start, o->pat) & (cache->size-1); - o->cache.home = &(cache->matches[h]); - o->cache.next = cache->matches[h]; - if (cache->matches[h]) cache->matches[h]->cache.home = &o->cache.next; - cache->matches[h] = o; - } + for (size_t i = 0; i < old_size; i++) { + for (match_t *o; (o = old_matches[i]); ) { + *o->cache.home = o->cache.next; + if (o->cache.next) o->cache.next->cache.home = o->cache.home; + size_t h = hash(o->start, o->pat) & (cache->size-1); + o->cache.home = &(cache->matches[h]); + o->cache.next = cache->matches[h]; + if (cache->matches[h]) cache->matches[h]->cache.home = &o->cache.next; + cache->matches[h] = o; } - free(old_matches); } + if (old_matches) delete(&old_matches); } } @@ -190,13 +188,12 @@ static void cache_save(cache_t *cache, def_t *defs, const char *str, pat_t *pat, // void cache_destroy(cache_t *cache) { - if (!cache->matches) return; for (size_t i = 0; i < cache->size; i++) { while (cache->matches[i]) cache_remove(cache, cache->matches[i]); } cache->occupancy = 0; - delete(&cache->matches); + if (cache->matches) delete(&cache->matches); cache->size = 0; } @@ -262,13 +259,11 @@ static match_t *_next_match(match_ctx_t *ctx, const char *str, pat_t *pat, pat_t } // Prune the unnecessary entries from the cache (those not between start/end) - if (ctx->cache->matches) { - for (size_t i = 0; i < ctx->cache->size; i++) { - for (match_t *m = ctx->cache->matches[i], *next = NULL; m; m = next) { - next = m->cache.next; - if (m->start < ctx->start || (m->end ? m->end : m->start) > ctx->end) - cache_remove(ctx->cache, m); - } + for (size_t i = 0; i < ctx->cache->size; i++) { + for (match_t *m = ctx->cache->matches[i], *next = NULL; m; m = next) { + next = m->cache.next; + if (m->start < ctx->start || (m->end ? m->end : m->start) > ctx->end) + cache_remove(ctx->cache, m); } } @@ -757,7 +752,7 @@ size_t free_all_matches(void) while (unused_matches) { match_t *m = unused_matches; list_remove(m, &m->gc); - free(m); + delete(&m); ++count; } return count; diff --git a/pattern.c b/pattern.c index 168afb5..eef1413 100644 --- a/pattern.c +++ b/pattern.c @@ -642,7 +642,7 @@ void free_pat(pat_t *target) if ((*rem) == target) { pat_t *tmp = *rem; *rem = (*rem)->next; - free(tmp); + delete(&tmp); break; } } @@ -650,7 +650,7 @@ void free_pat(pat_t *target) while (allocated_pats) { pat_t *tofree = allocated_pats; allocated_pats = tofree->next; - free(tofree); + delete(&tofree); } } } -- cgit v1.2.3