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) {
|
void* list_iterator_end(List* self) {
|
||||||
return list_at_unchecked(self, self->len);
|
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_begin(List* self);
|
||||||
extern void* list_iterator_end(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_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_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)))
|
#define list_at_as(T, __list, __i) ((T*)(list_at(__list, __i)))
|
||||||
|
|
Loading…
Reference in a new issue