feat: added list_contains

This commit is contained in:
Sara 2024-01-19 12:13:12 +01:00
parent 3c15d808b5
commit 40194b9e6c
2 changed files with 17 additions and 0 deletions

View file

@ -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;
}

View file

@ -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)))