]> diplodocus.org Git - nmh/blobdiff - sbr/vector.c
Replace `if (p) free(p)' with `mh_xfree(p)'.
[nmh] / sbr / vector.c
index ca8c894ea398bce0d3f988f72daf4f5f774a3e0c..d243f353486d50c86522e4baa43a9edbb0556f53 100644 (file)
@@ -46,8 +46,11 @@ static void bvector_resize (bvector_t, size_t);
 
 bvector_t
 bvector_create (size_t init_size) {
 
 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);
 
     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
 svector_create (size_t init_size) {
-    svector_t vec = mh_xmalloc (sizeof *vec);
+    svector_t vec;
     size_t bytes;
 
     size_t bytes;
 
+    NEW(vec);
     vec->maxsize = init_size ? init_size : VEC_INIT_SIZE;
     bytes = vec->maxsize * sizeof (char *);
     vec->strs = mh_xmalloc (bytes);
     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 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;
 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
 ivector_create (size_t init_size) {
-    ivector_t vec = mh_xmalloc (sizeof *vec);
+    ivector_t vec;
     size_t bytes;
 
     size_t bytes;
 
+    NEW(vec);
     vec->maxsize = init_size ? init_size : VEC_INIT_SIZE;
     bytes = vec->maxsize * sizeof (int);
     vec->ints = mh_xmalloc (bytes);
     vec->maxsize = init_size ? init_size : VEC_INIT_SIZE;
     bytes = vec->maxsize * sizeof (int);
     vec->ints = mh_xmalloc (bytes);