87#define LIST_DTOR_(list, slot) \
89 if ((list)->dtor == LIST_DTOR_FREE) { \
94 sizeof((list)->base[0]) == sizeof(ptr_) \
96 : (void)(fprintf(stderr, "list element type is not a pointer, but " \
97 "`free` used as destructor\n"), \
99 memcpy(&ptr_, &(list)->base[slot], sizeof(ptr_)); \
101 } else if ((list)->dtor != NULL) { \
102 (list)->dtor((list)->base[slot]); \
190 int (*
cmp)(
const void *,
const void *),
macro for API hiding/exposing
static int cmp(const void *key, const void *candidate)
UTIL_API void gv_list_sort_(list_t_ *list, int(*cmp)(const void *, const void *), size_t item_size)
UTIL_API list_t_ gv_list_copy_(const list_t_ list, size_t item_size)
UTIL_API void gv_list_sync_(list_t_ *list, size_t item_size)
UTIL_API void gv_list_reserve_(list_t_ *list, size_t capacity, size_t item_size)
UTIL_API void gv_list_pop_back_(list_t_ *list, void *into, size_t item_size)
UTIL_API size_t gv_list_append_slot_(list_t_ *list, size_t item_size)
UTIL_API size_t gv_list_get_(const list_t_ list, size_t index)
UTIL_API size_t gv_list_find_(const list_t_ list, const void *needle, size_t item_size)
UTIL_API void gv_list_reverse_(list_t_ *list, size_t item_size)
UTIL_API void gv_list_free_(list_t_ *list)
UTIL_API bool gv_list_contains_(const list_t_ list, const void *needle, size_t item_size)
UTIL_API void gv_list_shrink_to_fit_(list_t_ *list, size_t item_size)
UTIL_API void gv_list_remove_(list_t_ *list, size_t index, size_t item_size)
UTIL_API size_t gv_list_prepend_slot_(list_t_ *list, size_t item_size)
UTIL_API void gv_list_clear_(list_t_ *list, size_t item_size)
UTIL_API bool gv_list_is_contiguous_(const list_t_ list)
static size_t gv_list_size_(const list_t_ list)
UTIL_API void gv_list_pop_front_(list_t_ *list, void *into, size_t item_size)
UTIL_API bool gv_list_try_reserve_(list_t_ *list, size_t capacity, size_t item_size)
size_t size
size <= capacity
size_t capacity
available storage slots
void * base
(base == NULL && capacity == 0) || (base != NULL && capacity > 0)
size_t head
(capacity == 0 && head == 0) || (capacity > 0 && head < capacity)