X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/e491542da563673b49c6f6df9948ffaffbeed4fb..5356de2c15cdb7fdb76662740e264b4363d88cf5:/sbr/vector.c diff --git a/sbr/vector.c b/sbr/vector.c index ca8c894e..d243f353 100644 --- a/sbr/vector.c +++ b/sbr/vector.c @@ -46,8 +46,11 @@ static void bvector_resize (bvector_t, size_t); bvector_t bvector_create (size_t init_size) { - bvector_t vec = mh_xmalloc (sizeof *vec); - size_t bytes = BVEC_BYTES (vec, init_size ? init_size : VEC_INIT_SIZE); + bvector_t vec; + size_t bytes; + + NEW(vec); + bytes = BVEC_BYTES (vec, init_size ? init_size : VEC_INIT_SIZE); vec->bits = mh_xmalloc (bytes); memset (vec->bits, 0, bytes); @@ -144,9 +147,10 @@ static void svector_resize (svector_t, size_t); svector_t svector_create (size_t init_size) { - svector_t vec = mh_xmalloc (sizeof *vec); + svector_t vec; size_t bytes; + NEW(vec); vec->maxsize = init_size ? init_size : VEC_INIT_SIZE; bytes = vec->maxsize * sizeof (char *); vec->strs = mh_xmalloc (bytes); @@ -174,6 +178,24 @@ svector_at (svector_t vec, size_t i) { return vec->strs[i]; } +/* + * Return address of first element that stringwise matches s. + * The caller can replace the contents of the return address. + */ +char ** +svector_find (svector_t vec, const char *s) { + size_t i; + char **str = vec->strs; + + for (i = 0; i < vec->size; ++i, ++str) { + if (*str && ! strcmp(*str, s)) { + return str; + } + } + + return NULL; +} + char ** svector_strs (svector_t vec) { return vec->strs; @@ -205,9 +227,10 @@ static void ivector_resize (ivector_t, size_t); ivector_t ivector_create (size_t init_size) { - ivector_t vec = mh_xmalloc (sizeof *vec); + ivector_t vec; size_t bytes; + NEW(vec); vec->maxsize = init_size ? init_size : VEC_INIT_SIZE; bytes = vec->maxsize * sizeof (int); vec->ints = mh_xmalloc (bytes);