Thu, 30 Oct 2025 19:27:18 +0100
fix typo bug in cxListDifference() - resolves #745
| 1143 
0559812df10c
assign proper names to the documentation topics
 Mike Becker <universe@uap-core.de> parents: 
1142diff
changeset | 1 | # List Interface | 
| 1141 | 2 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 3 | The `list.h` header defines a common interface for all list implementations. | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 4 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 5 | UCX already comes with two common list implementations ([linked list](linked_list.h.md) and [array list](array_list.h.md)) | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 6 | that should cover most use cases. | 
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 7 | But if you feel the need to implement your own list, you will find the instructions [below](#implement-own-list-structures). | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 8 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 9 | ```C | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 10 | #include <cx/linked_list.h> | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 11 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 12 | CxList *cxLinkedListCreate(const CxAllocator *allocator, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 13 | cx_compare_func comparator, size_t elem_size); | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 14 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 15 | CxList *cxLinkedListCreateSimple(size_t elem_size); | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 16 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 17 | #include <cx/array_list.h> | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 18 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 19 | CxList *cxArrayListCreate(const CxAllocator *allocator, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 20 | cx_compare_func comparator, size_t elem_size, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 21 | size_t initial_capacity); | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 22 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 23 | CxList *cxArrayListCreateSimple(size_t elem_size, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 24 | size_t initial_capacity); | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 25 | ``` | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 26 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 27 | The function `cxLinkedListCreate()` creates a new linked list with the specified `allocator` which stores elements of size `elem_size`. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 28 | The elements are supposed to be compared with the specified `comparator` (cf. [](#access-and-find)). | 
| 1318 
12fa1d37fe48
allow changing the cxDefaultAllocator - resolves #669
 Mike Becker <universe@uap-core.de> parents: 
1316diff
changeset | 29 | The function `cxLinkedListCreateSimple()` will use the [default allocator](allocator.h.md#default-allocator) and does not specify a compare function. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 30 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 31 | Array lists can be created with `cxArrayListCreate()` where the additional argument `initial_capacity` specifies for how many elements the underlying array shall be initially allocated. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 32 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 33 | If `CX_STORE_POINTERS` is used as `elem_size`, the actual element size will be `sizeof(void*)` and the list will behave slightly differently when accessing elements. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 34 | Lists that are storing pointers will always return the stored pointer directly, instead of returning a pointer into the list's memory, thus saving you from unnecessary dereferencing. | 
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 35 | Conversely, when adding elements to the list, the pointers you specify (e.g., in `cxListAdd()` or `cxListInsert()`) are directly added to the list, instead of copying the contents pointed to by the argument. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 36 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 37 | > When you create a list which is storing pointers and do not specify a compare function, `cx_cmp_ptr` will be used by default. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 38 | |
| 1243 
13e15cd529ae
structur for map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1240diff
changeset | 39 | > If you want to lazy-initialize lists, you can use the global `cxEmptyList` symbol as a placeholder instead of using a `NULL`-pointer. | 
| 
13e15cd529ae
structur for map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1240diff
changeset | 40 | > While you *must not* insert elements into that list, you can safely access this list or create iterators. | 
| 
13e15cd529ae
structur for map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1240diff
changeset | 41 | > This allows you to write clean code without checking for `NULL`-pointer everywhere. | 
| 
13e15cd529ae
structur for map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1240diff
changeset | 42 | > You still need to make sure that the placeholder is replaced with an actual list before inserting elements. | 
| 
13e15cd529ae
structur for map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1240diff
changeset | 43 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 44 | ## Example | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 45 | |
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 46 | In the following example we create a linked-list of regular expressions for filtering data. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 47 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 48 | ```C | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 49 | #include <cx/linked_list.h> | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 50 | #include <regex.h> | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 51 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 52 | CxList *create_pattern_list(void) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 53 | // create a linked list to store patterns | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 54 | CxList *list = cxLinkedListCreateSimple(sizeof(regex_t)); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 55 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 56 | // automatically free the pattern when list gets destroyed | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 57 | cxDefineDestructor(list, regfree); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 58 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 59 | return list; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 60 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 61 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 62 | int add_pattern(CxList *list, const char *value) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 63 | // compile pattern and add it to the list, if successful | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 64 | regex_t regex; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 65 | if (regcomp(®ex, value, REG_EXTENDED|REG_NOSUB)) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 66 | return 1; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 67 | } else { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 68 | // take address of local variable | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 69 | // since we are not storing pointers in this list, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 70 | // we get a copy of the data directly in the list | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 71 | cxListAdd(list, ®ex); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 72 | return 0; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 73 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 74 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 75 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 76 | bool matches_any(CxList *list, const char *text) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 77 | CxIterator iter = cxListIterator(list); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 78 | cx_foreach(regex_t*, pat, iter) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 79 | if (regexec(pat, text, 0, NULL, 0) == 0) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 80 | return true; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 81 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 82 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 83 | return false; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 84 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 85 | ``` | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 86 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 87 | If in the above example the list was created with `CX_STORE_POINTERS` instead of `sizeof(regex_t)`, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 88 | the `add_pattern()` function would need to be changed as follows: | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 89 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 90 | ```C | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 91 | int add_pattern(CxList *list, const char *value) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 92 | // allocate memory here, because now we are storing pointers | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 93 | regex_t *regex = malloc(sizeof(regex_t)); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 94 | if (!regex || regcomp(regex, value, REG_EXTENDED|REG_NOSUB)) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 95 | return 1; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 96 | } else { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 97 | cxListAdd(list, regex); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 98 | return 0; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 99 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 100 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 101 | ``` | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 102 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 103 | Also, just registering `regfree()` as a destructor is not enough anymore because the `regex_t` structure also needs to be freed. | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 104 | Therefore, we would need to wrap the calls to `regfree()` and `free()` into an own destructor, which we then register with the list. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 105 | However, it should be clear by now that using `CX_STORE_POINTERS` is a bad choice for this use case to begin with. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 106 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 107 | As a rule of thumb: if you allocate memory for an element that you immediately put into the list, consider storing the element directly. | 
| 1243 
13e15cd529ae
structur for map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1240diff
changeset | 108 | And if you are getting pointers to already allocated memory from somewhere else, and you just want to organize those elements in a list, then consider using `CX_STORE_POINTERS`. | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 109 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 110 | ## Insert | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 111 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 112 | ```C | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 113 | #include <cx/list.h> | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 114 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 115 | int cxListAdd(CxList *list, const void *elem); | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 116 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 117 | int cxListInsert(CxList *list, size_t index, const void *elem); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 118 | |
| 1316 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 119 | void *cxListEmplace(CxList *list); | 
| 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 120 | |
| 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 121 | void *cxListEmplaceAt(CxList *list, size_t index); | 
| 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 122 | |
| 1433 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 123 | CxIterator cxListEmplaceArray(CxList *list, size_t n); | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 124 | |
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 125 | CxIterator cxListEmplaceArrayAt(CxList *list, size_t index, size_t n); | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 126 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 127 | int cxListInsertSorted(CxList *list, const void *elem); | 
| 1141 | 128 | |
| 1419 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 129 | int cxListInsertUnique(CxList *list, const void *elem); | 
| 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 130 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 131 | size_t cxListAddArray(CxList *list, const void *array, size_t n); | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 132 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 133 | size_t cxListInsertArray(CxList *list, size_t index, | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 134 | const void *array, size_t n); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 135 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 136 | size_t cxListInsertSortedArray(CxList *list, | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 137 | const void *array, size_t n); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 138 | |
| 1419 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 139 | size_t cxListInsertUniqueArray(CxList *list, | 
| 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 140 | const void *array, size_t n); | 
| 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 141 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 142 | int cxListInsertAfter(CxIterator *iter, const void *elem); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 143 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 144 | int cxListInsertBefore(CxIterator *iter, const void *elem); | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 145 | ``` | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 146 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 147 | The function `cxListAdd()` appends the element `elem` to the list and returns zero on success or non-zero when allocating the memory for the element fails. | 
| 1316 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 148 | Similarly, `cxListInsert()` adds the element at the specified `index`. | 
| 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 149 | |
| 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 150 | The functions `cxListEmplace()` and `cxListEmplaceAt()` behave like `cxListAdd()` and `cxListInsert()`, | 
| 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 151 | except that they only allocate the memory and return a pointer to it, leaving it to the callee to copy the element data into it. | 
| 1433 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 152 | The same is true for `cxListEmplaceArray()` and `cxListEmplaceArrayAt()`, which allocate memory for `n` elements and return an iterator to the first element. | 
| 1316 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 153 | Be aware that when the list is storing pointers, the allocated memory will be for the pointer, not the actual element's data. | 
| 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 154 | |
| 1433 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 155 | > If `cxListEmplaceArray()` or `cxListEmplaceArrayAt()` is unable to allocate memory for `n` elements, | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 156 | > the iterator will iterate only over the elements that have been successfully allocated. | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 157 | > The `elem_count` attribute of the iterator will be set to the number of successfully allocated elements. | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 158 | > And the `index` attribute will count from zero to `elem_count - 1`. | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 159 | > {style="note"} | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 160 | |
| 1316 
c41538edfcef
add cxListEmplace() and cxListEmplaceAt() plus some improvements to the array list implementation
 Mike Becker <universe@uap-core.de> parents: 
1315diff
changeset | 161 | The function `cxListInsertSorted()` inserts the element at the correct position so that the list remains sorted according to the list's compare function. | 
| 1428 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 162 | It is important that the list is already sorted before calling this function. | 
| 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 163 | On the other hand, `cxListInsertUnique()` inserts the element only if it is not already in the list. | 
| 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 164 | In this case it is strongly recommended that the list is already sorted but not required; the function will fall back to an inefficient algorithm when the list is not sorted. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 165 | |
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 166 | When you are currently iterating through a list, you can insert elements before or after the current position of the iterator | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 167 | with `cxListInsertBefore()` or `cxListInsertAfter()`, respectively. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 168 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 169 | If the list is storing pointers (cf. `cxCollectionStoresPointers()`), the pointer `elem` is directly added to the list. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 170 | Otherwise, the contents at the location pointed to by `elem` are copied to the list's memory with the element size specified during creation of the list. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 171 | |
| 1419 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 172 | On the other hand, the `array` argument for `cxListAddArray()`, `cxListInsertArray()`, `cxListInsertSortedArray()`, and `cxListInsertUniqueArray()` | 
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 173 | must always point to an array of elements to be added (i.e., either an array of pointers or an array of actual elements). | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 174 | |
| 1419 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 175 | The return values of the array-inserting functions are the number of elements that have been successfully _processed_. | 
| 
e46406fd1b3c
add functions to insert elements into lists/arrays without duplicates - resolves #557
 Mike Becker <universe@uap-core.de> parents: 
1351diff
changeset | 176 | Usually this is equivalent to the number of inserted elements, except for `cxListInsertUniqueArray()`, | 
| 1421 
809eb30cd621
fix missing documentation if insert_unique member - relates to #557
 Mike Becker <universe@uap-core.de> parents: 
1420diff
changeset | 177 | where the actual number of inserted elements may be lower than the number of successfully processed elements. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 178 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 179 | > Implementations are required to optimize the insertion of a sorted array into a sorted list in linear time, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 180 | > while inserting each element separately via `cxListInsertSorted()` may take quadratic time. | 
| 1428 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 181 | > | 
| 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 182 | > When used with sorted lists, the arrays passed to the functions must also be sorted according to the list's compare function. | 
| 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 183 | > Only when `cxListInsertUniqueArray()` is used with a list that is not sorted, the array does not need to be sorted. | 
| 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 184 | > | 
| 
0ac4aa1737fd
add support for non-sorted lists in cxListInsertUnique() and cxListInsertUniqueArray()
 Mike Becker <universe@uap-core.de> parents: 
1421diff
changeset | 185 | > The functions do not check if the passed arrays are sorted. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 186 | > {style="note"} | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 187 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 188 | ## Access and Find | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 189 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 190 | <link-summary>Functions for searching and accessing elements.</link-summary> | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 191 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 192 | ```C | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 193 | #include <cx/list.h> | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 194 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 195 | void *cxListAt(const CxList *list, size_t index); | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 196 | |
| 1315 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 197 | void *cxListFirst(const CxList *list); | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 198 | |
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 199 | void *cxListLast(const CxList *list); | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 200 | |
| 1287 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 201 | int cxListSet(CxList *list, size_t index, const void *elem); | 
| 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 202 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 203 | size_t cxListFind(const CxList *list, const void *elem); | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 204 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 205 | size_t cxListFindRemove(CxList *list, const void *elem); | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 206 | |
| 1294 
30d7ae76c76a
add test and documentation for cxListContains() - fixes #643
 Mike Becker <universe@uap-core.de> parents: 
1287diff
changeset | 207 | bool cxListContains(const CxList *list, const void *elem); | 
| 
30d7ae76c76a
add test and documentation for cxListContains() - fixes #643
 Mike Becker <universe@uap-core.de> parents: 
1287diff
changeset | 208 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 209 | bool cxListIndexValid(const CxList *list, size_t index); | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 210 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 211 | size_t cxListSize(const CxList *list); | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 212 | ``` | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 213 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 214 | The function `cxListAt()` accesses the element at the specified `index`. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 215 | If the list is storing pointers (i.e. `cxCollectionStoresPointers()` returns `true`), the pointer at the specified index is directly returned. | 
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 216 | Otherwise, a pointer to the element at the specified index is returned. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 217 | If the index is out-of-bounds, the function returns `NULL`. | 
| 1315 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 218 | The functions `cxListFirst()` and `cxListLast()` behave like `cxListAt()`, | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 219 | accessing the first or the last valid index, respectively, and returning `NULL` when the list is empty. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 220 | |
| 1287 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 221 | The function `cxListSet()` allows you to modify elements at a specific index in the list. | 
| 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 222 | This function replaces the element at the specified `index` with the value pointed to by `elem`. | 
| 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 223 | If the list is storing values directly (not pointers), the contents at the memory location `elem` will be copied into the list. | 
| 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 224 | If the list is storing pointers, the pointer value itself will be stored. | 
| 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 225 | The function returns `0` on success and `1` if the index is out of bounds. | 
| 
3a3ffc27813f
adds cxListSet() - resolves #642
 Mike Becker <universe@uap-core.de> parents: 
1244diff
changeset | 226 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 227 | On the other hand, `cxListFind()` searches for the element pointed to by `elem` by comparing each element in the list with the list's compare function | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 228 | and returns the first index when the element was found. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 229 | Otherwise, the function returns the list size. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 230 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 231 | The function `cxListFindRemove()` behaves like `cxListFind()`, except that it also removes the first occurrence of the element from the list. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 232 | This will _also_ call destructor functions, if specified, so take special care when you continue to use `elem`, or when the list is storing pointers and the element appears more than once in the list. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 233 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 234 | The function `cxListContains()` returns `true` if and only if `cxListFind()` returns a valid index. | 
| 1294 
30d7ae76c76a
add test and documentation for cxListContains() - fixes #643
 Mike Becker <universe@uap-core.de> parents: 
1287diff
changeset | 235 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 236 | With `cxListIndexValid()` you can check the index returned by `cxListFind()` or `cxListFindRemove()`, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 237 | which is more convenient than comparing the return value if the return value of `cxListSize()`. | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 238 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 239 | ## Remove | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 240 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 241 | ```C | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 242 | #include <cx/list.h> | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 243 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 244 | int cxListRemove(CxList *list, size_t index); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 245 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 246 | size_t cxListRemoveArray(CxList *list, size_t index, size_t num); | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 247 | |
| 1315 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 248 | size_t cxListFindRemove(CxList *list, const void *elem); | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 249 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 250 | int cxListRemoveAndGet(CxList *list, size_t index, void *targetbuf); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 251 | |
| 1315 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 252 | int cxListRemoveAndGetFirst(CxList *list, void *targetbuf); | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 253 | |
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 254 | int cxListPopFront(CxList *list, void *targetbuf); | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 255 | |
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 256 | int cxListRemoveAndLast(CxList *list, void *targetbuf); | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 257 | |
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 258 | int cxListPop(CxList *list, void *targetbuf); | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 259 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 260 | size_t cxListRemoveArrayAndGet(CxList *list, size_t index, size_t num, | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 261 | void *targetbuf); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 262 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 263 | void cxListClear(CxList *list); | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 264 | ``` | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 265 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 266 | The function `cxListRemove()` removes the element at the specified index and returns zero, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 267 | or returns non-zero if the index is out-of-bounds. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 268 | The function `cxListRemoveArray()` removes `num` elements starting at `index` and returns the number of elements that have been removed. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 269 | For each removed element, the [destructor functions](collection.h.md#destructor-functions) are called. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 270 | |
| 1315 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 271 | The function `cxListFindRemove()` finds the first element within the list that is equivalent to the element pointed to by `elem` and removes it from the list. | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 272 | This will _also_ call destructor functions, if specified, so take special care when you continue to use `elem`. | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 273 | |
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 274 | On the other hand, `cxListRemoveAndGet()` family of functions do not invoke the destructor functions | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 275 | and instead copy the elements into the `targetbuf`, which must be large enough to hold the removed elements. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 276 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 277 | > Note that when the list was initialized with `CX_STORE_POINTERS`, | 
| 1315 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 278 | > the elements that will be copied to the `targetbuf` are the _pointers_. | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 279 | > In contrast to other list functions, like `cxListAt()`, an automatic dereferencing does not happen here. | 
| 
b4c3e0b4c3d5
add convenience functions for easy access to first/last element of a list
 Mike Becker <universe@uap-core.de> parents: 
1294diff
changeset | 280 | >{style="note"} | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 281 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 282 | The function `cxListClear()` simply removes all elements from the list, invoking the destructor functions. | 
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 283 | It behaves equivalently but is usually more efficient than calling `cxListRemove()` for every index. | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 284 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 285 | ## Iterators | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 286 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 287 | ```C | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 288 | #include <cx/list.h> | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 289 | |
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 290 | CxIterator cxListIterator(const CxList *list); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 291 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 292 | CxIterator cxListBackwardsIterator(const CxList *list); | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 293 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 294 | CxIterator cxListIteratorAt(const CxList *list, size_t index); | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 295 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 296 | CxIterator cxListBackwardsIteratorAt(const CxList *list, size_t index); | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 297 | ``` | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 298 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 299 | The functions `cxListIterator()` and `cxListBackwardsIterator()` create iterators | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 300 | that start and the first or the last element in the list and iterate through the entire list. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 301 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 302 | The functions `cxListIteratorAt()` and `cxListBackwardsIteratorAt()` start with the element at the specified index | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 303 | and iterate until the end, or the beginning of the list, respectively. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 304 | |
| 1429 
6e0c3a8a914a
remove the concept of "mutating iterators" - resolves #579
 Mike Becker <universe@uap-core.de> parents: 
1428diff
changeset | 305 | Removing elements via an iterator will cause an invocation of the [destructor functions](collection.h.md#destructor-functions) for the removed element. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 306 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 307 | It is safe to specify an out-of-bounds index, or a `NULL` pointer, in which cases the returned iterator will behave like an iterator over an empty list. | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 308 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 309 | ## Reorder | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 310 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 311 | ```C | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 312 | #include <cx/list.h> | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 313 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 314 | int cxListSwap(CxList *list, size_t i, size_t j); | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 315 | |
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 316 | void cxListReverse(CxList *list); | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 317 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 318 | void cxListSort(CxList *list); | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 319 | ``` | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 320 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 321 | The function `cxListSwap()` swaps two elements specified by the indices `i` and `j`. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 322 | The return value is non-zero if one of the indices is out-of-bounds. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 323 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 324 | The function `cxListReverse()` reorders all elements so that they appear in exactly the opposite order after invoking this function. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 325 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 326 | The function `cxListSort()` sorts all elements with respect to the list's compare function, | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 327 | unless the list is already sorted (cf. `cxCollectionSorted()`), in which case the function immediately returns. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 328 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 329 | Default UCX implementations of the list interface make use of [small buffer optimizations](install.md#small-buffer-optimizations) when swapping elements. | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 330 | |
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 331 | > An invocation of `cxListSort` sets the `sorted` flag of the [collection](collection.h.md). | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 332 | > Implementations usually make use of this flag to optimize search operations, if possible. | 
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 333 | > For example, the [array list](array_list.h.md) implementation will use binary search | 
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 334 | > for `cxListFind()` and similar operations when the list is sorted. | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 335 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 336 | ## Compare | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 337 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 338 | ```C | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 339 | #include <cx/list.h> | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 340 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 341 | int cxListCompare(const CxList *list, const CxList *other); | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 342 | ``` | 
| 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 343 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 344 | Arbitrary lists can be compared element-wise with `cxListCompare()`, as long as the compare functions of both lists are equivalent. | 
| 1238 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 345 | |
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 346 | That means you can compare an UCX [array list](array_list.h.md) with a [linked list](linked_list.h.md), | 
| 1238 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 347 | and you could even compare lists that are storing pointers with lists that are not storing pointers. | 
| 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 348 | |
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 349 | However, the optimized list-internal compare implementation is only used when both the compare functions and the list classes are identical. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 350 | Otherwise, `cxListCompare()` will behave as if you were iterating through both lists and manually comparing the elements. | 
| 1238 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 351 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 352 | The return value of `cxListCompare()` is zero if the lists are element-wise equivalent. | 
| 1238 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 353 | If they are not, the non-zero return value equals the return value of the used compare function for the first pair of elements that are not equal. | 
| 1236 
f392f27a1dc6
list all function from list.h that need to be documented
 Mike Becker <universe@uap-core.de> parents: 
1190diff
changeset | 354 | |
| 1436 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 355 | ## Clone | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 356 | |
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 357 | ```C | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 358 | #include <cx/allocator.h> | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 359 | |
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 360 | typedef void*(cx_clone_func)( | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 361 | void *target, const void *source, | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 362 | const CxAllocator *allocator, | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 363 | void *data); | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 364 | |
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 365 | #include <cx/list.h> | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 366 | |
| 1444 
dd9dcbb39c2f
make clone functions return int instead of size_t
 Mike Becker <universe@uap-core.de> parents: 
1441diff
changeset | 367 | int cxListClone(CxList *dst, const CxList *src, | 
| 1436 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 368 | cx_clone_func clone_func, | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 369 | const CxAllocator *clone_allocator, | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 370 | void *data); | 
| 1453 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 371 | |
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 372 | int cxListDifference(CxList *dst, | 
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 373 | const CxList *minuend, const CxList *subtrahend, | 
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 374 | cx_clone_func clone_func, | 
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 375 | const CxAllocator *clone_allocator, | 
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 376 | void *data); | 
| 1436 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 377 | ``` | 
| 
c331add0d9f8
add cxListClone() - resolves #744 except for test coverage
 Mike Becker <universe@uap-core.de> parents: 
1433diff
changeset | 378 | |
| 1441 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 379 | With `cxListClone()` you can create deep copies of the elements in a list and insert them into another list. | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 380 | The destination list does not need to be empty, in which case the elements will be appended. | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 381 | Depending on the concrete list implementation, `cxListClone()` tries to allocate enough memory up-front, before trying | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 382 | to insert anything. | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 383 | |
| 1453 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 384 | The function `cxListDifference()` is similar to `cxListClone()`, | 
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 385 | except that it only clones elements from the minuend that are _not_ contained in the subtrahend. | 
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 386 | It is optimized for sorted lists, in which case it will take linear time instead of quadratic time for the operation. | 
| 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 387 | |
| 1441 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 388 | Refer to the documentation of the [clone-function callback](allocator.h.md#clone-function) to learn how to implement it. | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 389 | |
| 1453 
b6fc5b1d5c5d
add implementation for cxListDifference() - issue #745
 Mike Becker <universe@uap-core.de> parents: 
1444diff
changeset | 390 | The functions return zero if and only if all clone operations were successful. | 
| 1441 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 391 | |
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 392 | > It is perfectly possible to clone items into a list of a different type. | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 393 | > For example, you can clone elements from a list that is just storing pointers (`CX_STORE_POINTERS`) to a list that | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 394 | > allocates the memory for the objects (and vice versa). | 
| 
78ec3e2243e4
add documentation for cxListClone() - relates to #744
 Mike Becker <universe@uap-core.de> parents: 
1436diff
changeset | 395 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 396 | ## Dispose | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 397 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 398 | ```C | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 399 | #include <cx/list.h> | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 400 | |
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 401 | void cxListFree(CxList *list); | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 402 | ``` | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 403 | |
| 1238 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 404 | No matter with which function a `CxList` has been created, you can _always_ deallocate the entire memory with a call to `cxListFree()`. | 
| 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 405 | |
| 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 406 | The effect is equivalent to invoking `cxListClear()` plus deallocating the memory for the list structure. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1238diff
changeset | 407 | That means, for each element in the list, the [destructor functions](collection.h.md#destructor-functions) are called before deallocating the list. | 
| 1238 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 408 | |
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 409 | When the list has been storing pointers, make sure that either another reference to the same memory exists in your program, | 
| 1238 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 410 | or any of the destructor functions deallocates the memory. | 
| 
26299ce9c955
documentation for list compare and dispose
 Mike Becker <universe@uap-core.de> parents: 
1237diff
changeset | 411 | Otherwise, there is a risk of a memory leak. | 
| 1237 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 412 | |
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 413 | ## Implement own List Structures | 
| 
5cba456aff67
add structure to list documentation
 Mike Becker <universe@uap-core.de> parents: 
1236diff
changeset | 414 | |
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 415 | If you want to create your own list implementation, this is extremely easy. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 416 | |
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 417 | You need to define a function for creating your list and assign a `cx_list_class` structure with the pointers to your implementation. | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 418 | Then you call the `cx_list_init()` helper function to initialize the collection sture. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 419 | This also automatically adds support for `CX_STORE_POINTERS` to your list. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 420 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 421 | ```C | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 422 | // define the class with pointers to your functions | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 423 | static cx_list_class my_list_class = { | 
| 1244 
9a8e781258ac
complete most of the map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1243diff
changeset | 424 | my_list_deallocate, | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 425 | my_list_insert_element, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 426 | my_list_insert_array, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 427 | my_list_insert_sorted, | 
| 1421 
809eb30cd621
fix missing documentation if insert_unique member - relates to #557
 Mike Becker <universe@uap-core.de> parents: 
1420diff
changeset | 428 | my_list_insert_unique, | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 429 | my_list_insert_iter, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 430 | my_list_remove, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 431 | my_list_clear, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 432 | my_list_swap, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 433 | my_list_at, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 434 | my_list_find_remove, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 435 | my_list_sort, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 436 | my_list_compare, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 437 | my_list_reverse, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 438 | my_list_iterator, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 439 | }; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 440 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 441 | typedef struct { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 442 | struct cx_list_s base; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 443 | // your custom list data goes here | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 444 | } my_list; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 445 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 446 | CxList *my_list_create( | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 447 | const CxAllocator *allocator, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 448 | cx_compare_func cmpfun, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 449 | size_t elem_size | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 450 | ) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 451 | if (allocator == NULL) { | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 452 | allocator = cxDefaultAllocator; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 453 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 454 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 455 | my_list *list = cxCalloc(allocator, 1, sizeof(my_list)); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 456 | if (list == NULL) return NULL; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 457 | cx_list_init((CxList*)list, &my_list_class, | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 458 | allocator, cmpfun, elem_size); | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 459 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 460 | // initialize your custom list data here | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 461 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 462 | return (CxList *) list; | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 463 | } | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 464 | ``` | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 465 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 466 | The required behavior for the implementations is described in the following table. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 467 | You can always look at the source code of the UCX implementations to get inspiration. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 468 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 469 | | Function | Description | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 470 | |------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 471 | | `clear` | Invoke destructor functions on all elements and remove them from the list. | | 
| 1244 
9a8e781258ac
complete most of the map.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1243diff
changeset | 472 | | `deallocate` | Invoke destructor functions on all elements and deallocate the entire list memory. | | 
| 1433 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 473 | | `insert_element` | Insert or allocate a single element at the specified index. Return a pointer to the allocated element or `NULL` on failure. | | 
| 
81c301a59b7c
add cxListEmplaceArray() and cxListEmplaceArrayAt() as preparation for the clone implementation
 Mike Becker <universe@uap-core.de> parents: 
1429diff
changeset | 474 | | `insert_array` | Insert or allocate an array of elements starting at the specified index. Return the number of successfully inserted or allocated elements. | | 
| 1421 
809eb30cd621
fix missing documentation if insert_unique member - relates to #557
 Mike Becker <universe@uap-core.de> parents: 
1420diff
changeset | 475 | | `insert_sorted` | Insert an array of sorted elements into a sorted list. Return the number of elements processed (equals the number of elements inserted in this case). | | 
| 
809eb30cd621
fix missing documentation if insert_unique member - relates to #557
 Mike Becker <universe@uap-core.de> parents: 
1420diff
changeset | 476 | | `insert_unique` | Insert an array of sorted unique elements into a sorted list. Return the number of elements processed (not the number of elements inserted, which might be lower). | | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 477 | | `insert_iter` | Insert a single element depending on the iterator position. The third argument to this function is zero when the element shall be inserted after the iterator position and non-zero if it shall be inserted before the iterator position. The implementation is also responsible for adjusting the iterator, respectively. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 478 | | `remove` | Removes a multiple elements starting at the specified index. If a target buffer is specified, copy the elements to that buffer. Otherwise, invoke the destructor functions for the elements. Return the number of elements actually removed. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 479 | | `swap` | Swap two elements by index. Return zero on success or non-zero when any index was out-of-bounds. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 480 | | `at` | Return a pointer to the element at the specified index or `NULL` when the index is out-of-bounds. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 481 | | `find_remove` | Search for the specified element with the list's compare function and return the index if found. If the `remove` argument is true, invoke the destructor functions and remove the element. Return the list size if the element is not found. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 482 | | `sort` | Sort all elements in the list with respect to the list's compare function. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 483 | | `compare` | Only function pointer that may be `NULL`, in which case an unoptimized fallback is used. You can implement an optimized compare function that compares the list of another list of the same class. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 484 | | `reverse` | Reorders all elements in the list so that they appear in exactly the opposite order. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 485 | | `iterator` | Creates an iterator starting at the specified index. The Boolean argument indicates whether iteration is supposed to traverse backwards. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 486 | |
| 1420 
c6f55a2b3495
fix various typos in the web documentation
 Mike Becker <universe@uap-core.de> parents: 
1419diff
changeset | 487 | > If you initialize your list with `cx_list_init()`, you do not have to worry about making a | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 488 | > difference between storing pointers and storing elements, because your implementation will | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 489 | > be automatically wrapped. | 
| 1351 
4407229bd944
fix some grammar and wording issues
 Mike Becker <universe@uap-core.de> parents: 
1344diff
changeset | 490 | > This means you only have to handle the one single case described above. | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 491 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 492 | ### Default Class Function Implementations | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 493 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 494 | If you are satisfied with some of the default implementations, you can use some pre-defined functions. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 495 | Note, however, that those are not optimized for any specific list structure | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 496 | and just serve as a quick and convenient solution if performance does not matter for your use case. | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 497 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 498 | |
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 499 | | Default Function | Description | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 500 | |---------------------------------|-----------------------------------------------------------------------------------| | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 501 | | `cx_list_default_insert_array` | Falls back to multiple calls of `insert_element`. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 502 | | `cx_list_default_insert_sorted` | Uses linear search to find insertion points. | | 
| 1421 
809eb30cd621
fix missing documentation if insert_unique member - relates to #557
 Mike Becker <universe@uap-core.de> parents: 
1420diff
changeset | 503 | | `cx_list_default_insert_unique` | Like `cx_default_insert_sorted` but skips elements that are already contained. | | 
| 1240 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 504 | | `cx_list_default_sort` | Copies all elements to an array, applies `qsort()`, and copies the elements back. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 505 | | `cx_list_default_swap` | Uses a temporarily allocated buffer to perform a three-way-swap. | | 
| 
c5924c781372
complete list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 506 | |
| 1142 
9437530176bc
add symbols that need documentation as TODOs
 Mike Becker <universe@uap-core.de> parents: 
1141diff
changeset | 507 | |
| 1190 
a7b913d5d589
bring incomplete docs into a shape that can be released
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 508 | <seealso> | 
| 
a7b913d5d589
bring incomplete docs into a shape that can be released
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 509 | <category ref="apidoc"> | 
| 
a7b913d5d589
bring incomplete docs into a shape that can be released
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 510 | <a href="https://ucx.sourceforge.io/api/list_8h.html">list.h</a> | 
| 
a7b913d5d589
bring incomplete docs into a shape that can be released
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 511 | </category> | 
| 
a7b913d5d589
bring incomplete docs into a shape that can be released
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 512 | </seealso> |