From 40194b9e6c9403472791b74eadf02eaeadf2ac93 Mon Sep 17 00:00:00 2001 From: Sara Date: Fri, 19 Jan 2024 12:13:12 +0100 Subject: [PATCH] feat: added list_contains --- core/src/list.c | 15 +++++++++++++++ core/src/list.h | 2 ++ 2 files changed, 17 insertions(+) diff --git a/core/src/list.c b/core/src/list.c index 68a416b..d53cb6e 100644 --- a/core/src/list.c +++ b/core/src/list.c @@ -161,3 +161,18 @@ void* list_iterator_begin(List* self) { void* list_iterator_end(List* self) { return list_at_unchecked(self, self->len); } + +size_t list_contains(List* self, void* query) { + union { + uint8_t* as_byte; + void* as_void; + } data = { + .as_void = self->data + }; + for(size_t i = 0; i < self->len; ++i) { + if(memcmp(data.as_byte + i * self->element_size, query, self->element_size) == 0) { + return i; + } + } + return self->len; +} diff --git a/core/src/list.h b/core/src/list.h index 6f8789f..e79e206 100644 --- a/core/src/list.h +++ b/core/src/list.h @@ -26,6 +26,8 @@ extern void list_erase(List* self, size_t at); extern void* list_iterator_begin(List* self); extern void* list_iterator_end(List* self); +extern size_t list_contains(List* self, void* query); + #define list_from_type(T) list_init(sizeof(T)) #define list_foreach(T, iter, list) for(T iter = list_iterator_begin(list); iter != (T)list_iterator_end(list); ++iter) #define list_at_as(T, __list, __i) ((T*)(list_at(__list, __i)))