aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2021-09-26 12:57:04 -0700
committerBruce Hill <bruce@bruce-hill.com>2021-09-26 12:57:04 -0700
commitee0174001b385944c6a2b3b1fb6ba861613cb4f7 (patch)
tree7ae1d75d3bf7707da381171645562d4fc1758630
parent667f86e404471afde0229a8060ac80fe0e0834fc (diff)
Minor cleanups
-rw-r--r--definitions.c2
-rw-r--r--match.c41
-rw-r--r--pattern.c4
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);
}
}
}