feat: added list_contains
This commit is contained in:
parent
3c15d808b5
commit
40194b9e6c
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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)))
|
||||
|
|
Loading…
Reference in a new issue