78 void *(*insert_element)(
struct cx_list_s *list,
size_t index,
const void *data);
138 void *(*at)(
const struct cx_list_s *list,
size_t index);
207 size_t index, const
void *data,
size_t n);
227 const
void *sorted_data,
size_t n);
247 const
void *sorted_data,
size_t n);
333 const
void *left, const
void *right,
void *list);
671#define cxListPopFront(list, targetbuf) cxListRemoveAndGetFirst((list), (targetbuf))
705#define cxListPop(list, targetbuf) cxListRemoveAndGetLast((list), (targetbuf))
void *(* cx_clone_func)(void *target, const void *source, const CxAllocator *allocator, void *data)
Function pointer type for clone functions.
Definition allocator.h:141
struct cx_allocator_s CxAllocator
High-Level type alias for the allocator type.
Definition allocator.h:80
Common definitions for various collection implementations.
#define CX_COLLECTION_BASE
Use this macro to declare common members for a collection structure.
Definition collection.h:118
Common definitions and feature checks.
#define CX_EXPORT
Only used for building Windows DLLs.
Definition common.h:289
#define CX_NONNULL
All pointer arguments must be non-NULL.
Definition common.h:141
#define CX_NODISCARD
Warn about discarded return value.
Definition common.h:256
#define CX_NONNULL_ARG(...)
The specified pointer arguments must be non-NULL.
Definition common.h:146
#define CX_EXTERN
Declares a function with external linkage.
Definition common.h:297
#define CX_ACCESS_W(...)
Specifies that the function will only write through the given pointer.
Definition common.h:246
struct cx_iterator_s CxIterator
Iterator type.
Definition iterator.h:144
CxList *const cxEmptyList
A shared instance of an empty list.
bool cxListContains(const CxList *list, const void *elem)
Checks if the list contains the specified element.
int cxListIntersection(CxList *dst, const CxList *src, const CxList *other, cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data)
Clones elements from a list only if they are also present in another list.
int cxListSet(CxList *list, size_t index, const void *elem)
Sets the element at the specified index in the list.
struct cx_list_s CxList
Common type for all list implementations.
Definition list.h:179
CxIterator cxListBackwardsIterator(const CxList *list)
Returns a backwards iterator pointing to the last item of the list.
int cx_list_compare_wrapper(const void *left, const void *right, void *list)
A cx_compare_func2 compatible wrapper for the compare functions of a list.
size_t cx_list_default_insert_sorted(struct cx_list_s *list, const void *sorted_data, size_t n)
Default implementation of a sorted insert.
void cxListSort(CxList *list)
Sorts the list.
size_t cxListInsertSortedArray(CxList *list, const void *array, size_t n)
Inserts a sorted array into a sorted list.
CxIterator cxListIteratorAt(const CxList *list, size_t index)
Returns an iterator pointing to the item at the specified index.
CxIterator cxListBackwardsIteratorAt(const CxList *list, size_t index)
Returns a backwards iterator pointing to the item at the specified index.
size_t cx_list_default_insert_array(struct cx_list_s *list, size_t index, const void *data, size_t n)
Default implementation of an array insert.
size_t cxListSize(const CxList *list)
Returns the number of elements currently stored in the list.
int cxListRemoveAndGetLast(CxList *list, void *targetbuf)
Removes and returns the last element of the list.
void * cxListEmplace(CxList *list)
Allocates memory for an element at the end of the list and returns a pointer to that memory.
int cxListCompare(const CxList *list, const CxList *other)
Compares a list to another list of the same type.
int cxListInsertAfter(CxIterator *iter, const void *elem)
Inserts an element after the current location of the specified iterator.
size_t cxListInsertArray(CxList *list, size_t index, const void *array, size_t n)
Inserts multiple items to the list at the specified index.
CxIterator cxListEmplaceArrayAt(CxList *list, size_t index, size_t n)
Allocates memory for multiple elements and returns an iterator.
size_t cxListFind(const CxList *list, const void *elem)
Returns the index of the first element that equals elem.
int cxListDifferenceShallow(CxList *dst, const CxList *minuend, const CxList *subtrahend)
Clones elements from a list only if they are not present in another list.
size_t cxListRemoveArray(CxList *list, size_t index, size_t num)
Removes multiple element starting at the specified index.
size_t cxListAddArray(CxList *list, const void *array, size_t n)
Adds multiple items to the end of the list.
int cxListRemove(CxList *list, size_t index)
Removes the element at the specified index.
int cxListReserve(CxList *list, size_t capacity)
Asks the list to reserve enough memory for a given total number of elements.
struct cx_list_class_s cx_list_class
List class type.
Definition list.h:45
size_t cxListFindRemove(CxList *list, const void *elem)
Removes and returns the index of the first element that equals elem.
int cxListShrink(CxList *list)
Advises the list to free any overallocated memory.
CxIterator cxListEmplaceArray(CxList *list, size_t n)
Allocates memory for multiple elements and returns an iterator.
void cxListReverse(CxList *list)
Reverses the order of the items.
void * cxListEmplaceAt(CxList *list, size_t index)
Allocates memory for an element at the specified index and returns a pointer to that memory.
int cxListClone(CxList *dst, const CxList *src, cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data)
Performs a deep clone of one list into another.
int cxListCloneShallow(CxList *dst, const CxList *src)
Performs a shallow clone of one list into another.
int cxListInsert(CxList *list, size_t index, const void *elem)
Inserts an item at the specified index.
void * cxListAt(const CxList *list, size_t index)
Returns a pointer to the element at the specified index.
void cx_list_default_sort(struct cx_list_s *list)
Default unoptimized sort implementation.
int cxListRemoveAndGet(CxList *list, size_t index, void *targetbuf)
Removes and returns the element at the specified index.
int cxListUnion(CxList *dst, const CxList *src, const CxList *other, cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data)
Performs a deep clone of one list into another, skipping duplicates.
void cxListFree(CxList *list)
Deallocates the memory of the specified list structure.
int cxListInsertBefore(CxIterator *iter, const void *elem)
Inserts an element before the current location of the specified iterator.
int cxListAdd(CxList *list, const void *elem)
Adds an item to the end of the list.
int cx_list_default_swap(struct cx_list_s *list, size_t i, size_t j)
Default unoptimized swap implementation.
CxIterator cxListIterator(const CxList *list)
Returns an iterator pointing to the first item of the list.
int cxListDifference(CxList *dst, const CxList *minuend, const CxList *subtrahend, cx_clone_func clone_func, const CxAllocator *clone_allocator, void *data)
Clones elements from a list only if they are not present in another list.
void cx_list_init(struct cx_list_s *list, struct cx_list_class_s *cl, const struct cx_allocator_s *allocator, size_t elem_size)
Initializes a list struct.
bool cxListIndexValid(const CxList *list, size_t index)
Checks if the specified index is within bounds.
size_t cx_list_default_insert_unique(struct cx_list_s *list, const void *sorted_data, size_t n)
Default implementation of an array insert where only elements are inserted when they don't exist in t...
int cxListInsertUnique(CxList *list, const void *elem)
Inserts an item into a list if it does not exist.
int cxListUnionShallow(CxList *dst, const CxList *src, const CxList *other)
Performs a deep clone of one list into another, skipping duplicates.
int cxListRemoveAndGetFirst(CxList *list, void *targetbuf)
Removes and returns the first element of the list.
size_t cxListRemoveArrayAndGet(CxList *list, size_t index, size_t num, void *targetbuf)
Removes and returns multiple elements starting at the specified index.
size_t cxListInsertUniqueArray(CxList *list, const void *array, size_t n)
Inserts an array into a list, skipping duplicates.
int cxListInsertSorted(CxList *list, const void *elem)
Inserts an item into a sorted list.
int cxListIntersectionShallow(CxList *dst, const CxList *src, const CxList *other)
Clones elements from a list only if they are also present in another list.
void * cxListLast(const CxList *list)
Returns a pointer to the last element.
void cxListClear(CxList *list)
Removes all elements from this list.
void * cxListFirst(const CxList *list)
Returns a pointer to the first element.
int cxListSwap(CxList *list, size_t i, size_t j)
Swaps two items in the list.
Structure holding the data for an allocator.
Definition allocator.h:66
Internal iterator struct - use CxIterator.
Definition iterator.h:99
The class definition for arbitrary lists.
Definition list.h:64
void(* sort)(struct cx_list_s *list)
Member function for sorting the list.
Definition list.h:150
size_t(* find_remove)(struct cx_list_s *list, const void *elem, bool remove)
Member function for finding and optionally removing an element.
Definition list.h:143
int(* swap)(struct cx_list_s *list, size_t i, size_t j)
Member function for swapping two elements.
Definition list.h:133
size_t(* insert_sorted)(struct cx_list_s *list, const void *sorted_data, size_t n)
Member function for inserting sorted elements into a sorted list.
Definition list.h:96
void(* clear)(struct cx_list_s *list)
Member function for removing all elements.
Definition list.h:126
int(* compare)(const struct cx_list_s *list, const struct cx_list_s *other)
Optional member function for comparing this list to another list of the same type.
Definition list.h:157
struct cx_iterator_s(* iterator)(const struct cx_list_s *list, size_t index, bool backward)
Member function for returning an iterator pointing to the specified index.
Definition list.h:173
int(* change_capacity)(struct cx_list_s *list, size_t new_capacity)
Optional member function for changing the capacity.
Definition list.h:168
void(* deallocate)(struct cx_list_s *list)
Destructor function.
Definition list.h:71
size_t(* remove)(struct cx_list_s *list, size_t index, size_t num, void *targetbuf)
Member function for removing elements.
Definition list.h:121
size_t(* insert_array)(struct cx_list_s *list, size_t index, const void *data, size_t n)
Member function for inserting multiple elements.
Definition list.h:88
size_t(* insert_unique)(struct cx_list_s *list, const void *sorted_data, size_t n)
Member function for inserting multiple elements if they do not exist.
Definition list.h:104
int(* insert_iter)(struct cx_iterator_s *iter, const void *elem, int prepend)
Member function for inserting an element relative to an iterator position.
Definition list.h:109
void(* reverse)(struct cx_list_s *list)
Member function for reversing the order of the items.
Definition list.h:162
Structure for holding the base data of a list.
Definition list.h:50
const cx_list_class * cl
The list class definition.
Definition list.h:58