From a3a50433ffe0674291d4c5e9d2247cca7f691faa Mon Sep 17 00:00:00 2001 From: Elias Fleckenstein Date: Thu, 21 Apr 2022 22:54:56 +0200 Subject: [PATCH] Add array_idx --- array.c | 11 ++++++++++- array.h | 7 +++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/array.c b/array.c index 714fa4d..70ba8fa 100644 --- a/array.c +++ b/array.c @@ -1,5 +1,5 @@ #include // for malloc, realloc, free, qsort -#include // for memmove, memcpy +#include // 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 deeea1c..1c5178d 100644 --- 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. -- 2.44.0