From e665d3b85024e3a7580e80888a70b47d5ae9384c Mon Sep 17 00:00:00 2001 From: Bart House Date: Sat, 13 Jul 2019 16:08:08 -0700 Subject: [PATCH] Adding ptr_array data structure. --- include/decl.h | 7 +++++++ include/extern.h | 2 ++ src/hacklib.c | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+) diff --git a/include/decl.h b/include/decl.h index 5ebaa326e..834b14ab8 100644 --- a/include/decl.h +++ b/include/decl.h @@ -455,6 +455,13 @@ struct early_opt { boolean valallowed; }; +struct ptr_array { + size_t length; + size_t max_length; + void ** elements; +}; +typedef struct ptr_array ptr_array_t; + #undef E #endif /* DECL_H */ diff --git a/include/extern.h b/include/extern.h index abea20a68..d2ed2ff9e 100644 --- a/include/extern.h +++ b/include/extern.h @@ -968,6 +968,8 @@ E void FDECL(strbuf_append, (strbuf_t *, const char *)); E void FDECL(strbuf_reserve, (strbuf_t *, int)); E void FDECL(strbuf_empty, (strbuf_t *)); E void FDECL(strbuf_nl_to_crlf, (strbuf_t *)); +E struct ptr_array * FDECL(ptr_array_new, (size_t length)); +E void FDECL(ptr_array_free, (struct ptr_array *)); /* ### invent.c ### */ diff --git a/src/hacklib.c b/src/hacklib.c index b97a78a65..9fe316517 100644 --- a/src/hacklib.c +++ b/src/hacklib.c @@ -1223,4 +1223,38 @@ strbuf_t *strbuf; } } +ptr_array_t * +ptr_array_new(max_length) + size_t max_length; +{ + size_t esize = max_length * sizeof(void *); + ptr_array_t * a = (ptr_array_t *) malloc(sizeof(ptr_array_t) + esize); + a->elements = (void **)(a + 1); + a->length = 0; + a->max_length = max_length; + memset(a->elements, 0, esize); + return a; +} + +void +ptr_array_free(a) + ptr_array_t * a; +{ + size_t i; + + nhassert(a->length <= a->max_length); + + for(i = 0; i < a->length; i++) + if(a->elements[i]) + free(a->elements[i]); + + for (i = a->length; i < a->max_length; i++) { + nhassert(a->elements[i] == NULL); + if(a->elements[i]) + free(a->elements[i]); + } + + free(a); +} + /*hacklib.c*/ -- 2.49.0