]> git.lizzy.rs Git - dragonstd.git/commitdiff
Add array_idx
authorElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 21 Apr 2022 20:54:56 +0000 (22:54 +0200)
committerElias Fleckenstein <eliasfleckenstein@web.de>
Thu, 21 Apr 2022 20:54:56 +0000 (22:54 +0200)
array.c
array.h

diff --git a/array.c b/array.c
index 714fa4dc78c122ac7bfda61d7b9899155593a4d8..70ba8faa07b6207e6c421816487a9f50a3b403f1 100644 (file)
--- a/array.c
+++ b/array.c
@@ -1,5 +1,5 @@
 #include <stdlib.h>        // for malloc, realloc, free, qsort
-#include <string.h>        // for memmove, memcpy
+#include <string.h>        // for memmove, memcpy, memcmp
 #include "array.h"
 #include "bits/callback.h" // for Comparator
 
@@ -55,6 +55,15 @@ void array_apd(Array *array, const void *ptr)
        memcpy(array->ptr + oldsiz * array->mbs, ptr, array->mbs);
 }
 
+ssize_t array_idx(Array *array, const void *ptr)
+{
+       for (size_t i = 0; i < array->siz; i++)
+               if (memcmp(array->ptr + i * array->mbs, ptr, array->mbs) == 0)
+                       return i;
+
+       return -1;
+}
+
 void array_cpy(Array *array, void **ptr, size_t *n)
 {
        *n = array->siz;
diff --git a/array.h b/array.h
index deeea1cdb76e47ee40bb5ddc37b487455a39d25e..1c5178d11119aeb736cc249d5c7786c800e5ea80 100644 (file)
--- a/array.h
+++ b/array.h
@@ -96,6 +96,13 @@ void array_apd(Array *array, const void *ptr);
                but it is slightly faster since it saves unnecessary calls.
 */
 
+ssize_t array_idx(Array *array, const void *ptr);
+/*
+       Returns the index of the first element that equals ptr, or none if no matches.
+
+       Uses memcmp to compare the elements.
+*/
+
 void array_cpy(Array *array, void **ptr, size_t *n);
 /*
        Allocates a buffer big enough to fit the array's used size.