109 const void *sorted_data,
248 const void *sorted_data,
590 return list->cl->remove(list,
index, 1, targetbuf) == 0;
637 return list->cl->remove(list,
index, num, targetbuf);
674 return list->
cl->
swap(list, i, j);
Common definitions for various collection implementations.
#define CX_COLLECTION_BASE
Use this macro to declare common members for a collection structure.
Definition collection.h:113
Common definitions and feature checks.
#define cx_attr_export
Only used for building Windows DLLs.
Definition common.h:285
#define cx_attr_nonnull
All pointer arguments must be non-NULL.
Definition common.h:136
#define cx_attr_nodiscard
Warn about discarded return value.
Definition common.h:265
#define cx_attr_access_w(...)
Specifies that the function will only write through the given pointer.
Definition common.h:241
#define cx_attr_nonnull_arg(...)
The specified pointer arguments must be non-NULL.
Definition common.h:141
int(* cx_compare_func)(const void *left, const void *right)
A comparator function comparing two arbitrary values.
Definition compare.h:60
CxList *const cxEmptyList
A shared instance of an empty list.
static CxIterator cxListIteratorAt(const CxList *list, size_t index)
Returns an iterator pointing to the item at the specified index.
Definition list.h:705
static int cxListRemoveAndGet(CxList *list, size_t index, void *targetbuf)
Removes and returns the element at the specified index.
Definition list.h:585
static CxIterator cxListMutBackwardsIterator(CxList *list)
Returns a mutating backwards iterator pointing to the last item of the list.
Definition list.h:832
static size_t cxListSize(const CxList *list)
Returns the number of elements currently stored in the list.
Definition list.h:350
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.
static size_t cxListInsertSortedArray(CxList *list, const void *array, size_t n)
Inserts a sorted array into a sorted list.
Definition list.h:491
static int cxListInsert(CxList *list, size_t index, const void *elem)
Inserts an item at the specified index.
Definition list.h:412
static void cxListReverse(CxList *list)
Reverses the order of the items.
Definition list.h:908
static CxIterator cxListBackwardsIterator(const CxList *list)
Returns a backwards iterator pointing to the last item of the list.
Definition list.h:816
static int cxListInsertSorted(CxList *list, const void *elem)
Inserts an item into a sorted list.
Definition list.h:432
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.
int cxListCompare(const CxList *list, const CxList *other)
Compares a list to another list of the same type.
static size_t cxListRemoveArrayAndGet(CxList *list, size_t index, size_t num, void *targetbuf)
Removes and returns multiple element starting at the specified index.
Definition list.h:631
static int cxListInsertAfter(CxIterator *iter, const void *elem)
Inserts an element after the current location of the specified iterator.
Definition list.h:517
static CxIterator cxListMutIterator(CxList *list)
Returns a mutating iterator pointing to the first item of the list.
Definition list.h:799
static int cxListSwap(CxList *list, size_t i, size_t j)
Swaps two items in the list.
Definition list.h:668
CxIterator cxListMutIteratorAt(CxList *list, size_t index)
Returns a mutating iterator pointing to the item at the specified index.
static void cxListSort(CxList *list)
Sorts the list.
Definition list.h:896
static size_t cxListAddArray(CxList *list, const void *array, size_t n)
Adds multiple items to the end of the list.
Definition list.h:389
void cx_list_init(struct cx_list_s *list, struct cx_list_class_s *cl, const struct cx_allocator_s *allocator, cx_compare_func comparator, size_t elem_size)
Initializes a list struct.
static int cxListInsertBefore(CxIterator *iter, const void *elem)
Inserts an element before the current location of the specified iterator.
Definition list.h:543
static bool cxListIndexValid(const CxList *list, size_t index)
Checks if the specified index is within bounds.
Definition list.h:865
static size_t cxListFindRemove(CxList *list, const void *elem)
Removes and returns the index of the first element that equals elem.
Definition list.h:881
static int cxListAdd(CxList *list, const void *elem)
Adds an item to the end of the list.
Definition list.h:364
void cx_list_default_sort(struct cx_list_s *list)
Default unoptimized sort implementation.
void cxListFree(CxList *list)
Deallocates the memory of the specified list structure.
static size_t cxListFind(const CxList *list, const void *elem)
Returns the index of the first element that equals elem.
Definition list.h:848
static CxIterator cxListIterator(const CxList *list)
Returns an iterator pointing to the first item of the list.
Definition list.h:783
static size_t cxListRemoveArray(CxList *list, size_t index, size_t num)
Removes multiple element starting at the specified index.
Definition list.h:609
int cx_list_default_swap(struct cx_list_s *list, size_t i, size_t j)
Default unoptimized swap implementation.
static CxIterator cxListBackwardsIteratorAt(const CxList *list, size_t index)
Returns a backwards iterator pointing to the item at the specified index.
Definition list.h:725
static void * cxListAt(const CxList *list, size_t index)
Returns a pointer to the element at the specified index.
Definition list.h:685
static size_t cxListInsertArray(CxList *list, size_t index, const void *array, size_t n)
Inserts multiple items to the list at the specified index.
Definition list.h:461
static int cxListRemove(CxList *list, size_t index)
Removes the element at the specified index.
Definition list.h:564
CxIterator cxListMutBackwardsIteratorAt(CxList *list, size_t index)
Returns a mutating backwards iterator pointing to the item at the specified index.
static void cxListClear(CxList *list)
Removes all elements from this list.
Definition list.h:649
Structure holding the data for an allocator.
Definition allocator.h:84
bool sorted
Indicates if this collection is guaranteed to be sorted.
Definition collection.h:99
bool store_pointer
Indicates if this list is supposed to store pointers instead of copies of the actual objects.
Definition collection.h:94
size_t size
The number of currently stored elements.
Definition collection.h:71
Internal iterator struct - use CxIterator.
Definition iterator.h:97
void * m
Access for mutating iterators.
Definition iterator.h:115
size_t index
If the iterator is position-aware, contains the index of the element in the underlying collection.
Definition iterator.h:126
union cx_iterator_s::@2 src_handle
Handle for the source collection, if any.
size_t elem_size
The size of an individual element.
Definition iterator.h:131
The class definition for arbitrary lists.
Definition list.h:72
void(* sort)(struct cx_list_s *list)
Member function for sorting the list.
Definition list.h:177
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:166
int(* swap)(struct cx_list_s *list, size_t i, size_t j)
Member function for swapping two elements.
Definition list.h:149
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:107
void(* clear)(struct cx_list_s *list)
Member function for removing all elements.
Definition list.h:142
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:185
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:198
int(* insert_element)(struct cx_list_s *list, size_t index, const void *data)
Member function for inserting a single element.
Definition list.h:84
void(* deallocate)(struct cx_list_s *list)
Destructor function.
Definition list.h:79
size_t(* remove)(struct cx_list_s *list, size_t index, size_t num, void *targetbuf)
Member function for removing elements.
Definition list.h:132
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:95
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:116
void(* reverse)(struct cx_list_s *list)
Member function for reversing the order of the items.
Definition list.h:193
void *(* at)(const struct cx_list_s *list, size_t index)
Member function for element lookup.
Definition list.h:158
Structure for holding the base data of a list.
Definition list.h:54
const cx_list_class * climpl
The actual implementation in case the list class is delegating.
Definition list.h:66
struct cx_collection_s collection
Common members for collections.
Definition list.h:58
const cx_list_class * cl
The list class definition.
Definition list.h:62