diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2021-07-26 20:59:45 -0700 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2021-07-26 20:59:45 -0700 |
| commit | f23b9bc6375797d03dee54a31fcaa634f8376975 (patch) | |
| tree | 624128655eeb20d68098e8c772d9d3ac77f1ee1e /definitions.c | |
| parent | d7030709801cde01739850a85f156d181554f520 (diff) | |
Introduced cache to greatly speed up many use cases
Diffstat (limited to 'definitions.c')
| -rw-r--r-- | definitions.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/definitions.c b/definitions.c index 18bd612..c85e227 100644 --- a/definitions.c +++ b/definitions.c @@ -11,12 +11,15 @@ #include "pattern.h" #include "utils.h" +static size_t next_id = 0; + // // Return a new list of definitions with one added to the front // def_t *with_def(def_t *defs, size_t namelen, const char *name, pat_t *pat) { def_t *def = new(def_t); + def->id = next_id++; def->next = defs; def->namelen = namelen; def->name = name; @@ -68,14 +71,15 @@ def_t *lookup(def_t *defs, size_t namelen, const char *name) // // Free all the given definitions up till (but not including) `stop` // -void free_defs(def_t **defs, def_t *stop) +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); - (*defs) = next; + while (defs != stop && defs != NULL) { + def_t *next = defs->next; + defs->next = NULL; + free(defs); + defs = next; } + return defs; } // vim: ts=4 sw=0 et cino=L2,l1,(0,W4,m1 |
