Mon, 10 Mar 2025 11:54:46 +0100
complete list.h documentation
relates to #451
1143
0559812df10c
assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents:
1142
diff
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:
1190
diff
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:
1190
diff
changeset
|
4 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
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:
1190
diff
changeset
|
6 | that should cover most use cases. |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
7 | But if you feel the need to implement an own list, you will find instructions [below](#implement-own-list-structures). |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
8 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
9 | ```C |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
10 | #include <cx/linked_list.h> |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
11 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
12 | CxList *cxLinkedListCreate(const CxAllocator *allocator, |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
changeset
|
14 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
changeset
|
16 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
17 | #include <cx/array_list.h> |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
18 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
19 | CxList *cxArrayListCreate(const CxAllocator *allocator, |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
changeset
|
21 | size_t initial_capacity); |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
22 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
changeset
|
24 | size_t initial_capacity); |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
25 | ``` |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
26 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
changeset
|
28 | The elements are supposed to be compared with the specified `comparator` (cf. [](#access-and-find)). |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
29 | The function `cxLinkedListCreateSimple()` will use the stdlib default allocator and does not specify a compare function. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
30 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
changeset
|
32 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
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. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
36 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1238
diff
changeset
|
38 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
39 | ## Example |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
40 | |
1240
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
41 | 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:
1239
diff
changeset
|
42 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
43 | ```C |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
44 | #include <cx/linked_list.h> |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
45 | #include <regex.h> |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
46 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
47 | CxList *create_pattern_list(void) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
48 | // create a linked list to store patterns |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
49 | CxList *list = cxLinkedListCreateSimple(sizeof(regex_t)); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
50 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
51 | // automatically free the pattern when list gets destroyed |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
52 | cxDefineDestructor(list, regfree); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
53 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
54 | return list; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
55 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
56 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
57 | int add_pattern(CxList *list, const char *value) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
58 | // compile pattern and add it to the list, if successful |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
59 | regex_t regex; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
60 | if (regcomp(®ex, value, REG_EXTENDED|REG_NOSUB)) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
61 | return 1; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
62 | } else { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
63 | // take address of local variable |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
64 | // since we are not storing pointers in this list, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
65 | // we get a copy of the data directly in the list |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
66 | cxListAdd(list, ®ex); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
67 | return 0; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
68 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
69 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
70 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
71 | bool matches_any(CxList *list, const char *text) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
72 | CxIterator iter = cxListIterator(list); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
73 | cx_foreach(regex_t*, pat, iter) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
74 | if (regexec(pat, text, 0, NULL, 0) == 0) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
75 | return true; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
76 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
77 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
78 | return false; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
79 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
80 | ``` |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
81 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
82 | 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:
1239
diff
changeset
|
83 | the `add_pattern()` function would need to be changed as follows: |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
84 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
85 | ```C |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
86 | int add_pattern(CxList *list, const char *value) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
87 | // allocate memory here, because now we are storing pointers |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
88 | regex_t *regex = malloc(sizeof(regex_t)); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
89 | if (!regex || regcomp(regex, value, REG_EXTENDED|REG_NOSUB)) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
90 | return 1; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
91 | } else { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
92 | cxListAdd(list, regex); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
93 | return 0; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
94 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
95 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
96 | ``` |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
97 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
98 | Also, just registering `regfree()` as destructor is not sufficient anymore, because the `regex_t` structure also needs to be freed. |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
99 | 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:
1239
diff
changeset
|
100 | 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:
1239
diff
changeset
|
101 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
102 | As a rule of thumb: if you allocate memory for an element that you immediately put into the list, consider storing the element directly. |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
103 | 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:
1236
diff
changeset
|
104 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
105 | > If you want to lazy-initialize lists, you can use the global `cxEmptyList` symbol as a placeholder instead of using a `NULL`-pointer. |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
106 | > While you *must not* insert elements into that list, you can safely access this list or create iterators. |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
107 | > This allows you to write clean code without checking for `NULL`-pointer everywhere. |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
108 | > You still need to make sure that the placeholder is replaced with an actual list before inserting elements. |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
109 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
110 | ## Insert |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
111 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
112 | ```C |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1190
diff
changeset
|
114 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
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:
1190
diff
changeset
|
116 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
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:
1190
diff
changeset
|
118 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
119 | int cxListInsertSorted(CxList *list, const void *elem); |
1141 | 120 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
121 | 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:
1238
diff
changeset
|
122 | |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
123 | 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:
1190
diff
changeset
|
124 | 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:
1190
diff
changeset
|
125 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
126 | size_t cxListInsertSortedArray(CxList *list, |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
127 | 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:
1190
diff
changeset
|
128 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
129 | 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:
1190
diff
changeset
|
130 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
131 | int cxListInsertBefore(CxIterator *iter, const void *elem); |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
132 | ``` |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
133 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
134 | 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. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
135 | Similarly, `cxListInsert()` adds the element at the specified `index`, |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
136 | and `cxListInsertSorted()` adds the element at the correct position so that the list remains sorted according to the list's compare function. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
137 | |
1240
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
138 | 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:
1238
diff
changeset
|
139 | with `cxListInsertBefore()` or `cxListInsertAfter()`, respectively. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
140 | This _should_ be done with [mutating iterators](iterator.h.md#mutating-iterators) only, but is also defined for normal iterators. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
141 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
142 | 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:
1238
diff
changeset
|
143 | 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:
1238
diff
changeset
|
144 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
145 | On the other hand the `array` argument for `cxListAddArray()`, `cxListInsertArray()`, and `cxListInsertSortedArray()` |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
146 | must always point to an array of elements to be added (i.e. either an array of pointers, or an array of actual elements). |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
147 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
148 | A special requirement for `cxListInsertSortedArray()` is, that the `array` must already be sorted. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
149 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
150 | > 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:
1238
diff
changeset
|
151 | > while inserting each element separately via `cxListInsertSorted()` may take quadratic time. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
152 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
153 | > The functions `cxListInsertSorted()` and `cxListInsertSortedArray()` do neither check if the list is already sorted, nor do they actively sort the list. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
154 | > {style="note"} |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
155 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
156 | ## Access and Find |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
157 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
158 | <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:
1238
diff
changeset
|
159 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
160 | ```C |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
161 | #include <cx/list.h> |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
162 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
163 | void *cxListAt(const CxList *list, size_t index); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
164 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
165 | size_t cxListFind(const CxList *list, const void *elem); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
166 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
167 | size_t cxListFindRemove(CxList *list, const void *elem); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
168 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
169 | 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:
1238
diff
changeset
|
170 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
171 | size_t cxListSize(const CxList *list); |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
172 | ``` |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
173 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
174 | 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:
1238
diff
changeset
|
175 | If the list is storing pointers (i.e. `cxCollectionStoresPointers()` returns `true`), the pointer at the specified index is directly returned. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
176 | Otherwise, a pointer to element at the specified index is returned. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
177 | If the index is out-of-bounds, the function returns `NULL`. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
178 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
179 | 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, |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
180 | 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:
1238
diff
changeset
|
181 | Otherwise, the function returns the list size. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
182 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
183 | 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:
1238
diff
changeset
|
184 | 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:
1238
diff
changeset
|
185 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
186 | 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:
1238
diff
changeset
|
187 | 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:
1236
diff
changeset
|
188 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
189 | ## Remove |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
190 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
191 | ```C |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
192 | #include <cx/list.h> |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
193 | |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
194 | 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:
1190
diff
changeset
|
195 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
196 | 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:
1238
diff
changeset
|
197 | |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
198 | 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:
1190
diff
changeset
|
199 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
200 | 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:
1190
diff
changeset
|
201 | void *targetbuf); |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
202 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
203 | size_t cxListFindRemove(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:
1190
diff
changeset
|
204 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
205 | void cxListClear(CxList *list); |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
206 | ``` |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
207 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
208 | 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:
1238
diff
changeset
|
209 | 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:
1238
diff
changeset
|
210 | 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:
1238
diff
changeset
|
211 | 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:
1238
diff
changeset
|
212 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
213 | On the other hand, `cxListRemoveAndGet()` and `cxListRemoveArrayAndGet()` do not invoke the destructor functions |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
214 | 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:
1238
diff
changeset
|
215 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
216 | 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. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
217 | This will _also_ call destructor functions, if specified, so take special care when you continue to use `elem`. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
218 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
219 | The function `cxListClear()` simply removes all elements from the list, invoking the destructor functions. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
220 | 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:
1190
diff
changeset
|
221 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
222 | ## Iterators |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
223 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
224 | ```C |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
225 | #include <cx/list.h> |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
226 | |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
227 | CxIterator cxListIterator(const CxList *list); |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
228 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
229 | CxIterator cxListBackwardsIterator(const CxList *list); |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
230 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
231 | CxIterator cxListIteratorAt(const CxList *list, size_t index); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
232 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
233 | CxIterator cxListBackwardsIteratorAt(const CxList *list, size_t index); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
234 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
235 | CxIterator cxListMutIterator(CxList *list); |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
236 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
237 | CxIterator cxListMutBackwardsIterator(CxList *list); |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
238 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
239 | CxIterator cxListMutIteratorAt(CxList *list, size_t index); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
240 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
241 | CxIterator cxListMutBackwardsIteratorAt(CxList *list, size_t index); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
242 | ``` |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
243 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
244 | The functions `cxListIterator()` and `cxListBackwardsIterator()` create iterators |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
245 | 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:
1238
diff
changeset
|
246 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
247 | 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:
1238
diff
changeset
|
248 | 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:
1238
diff
changeset
|
249 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
250 | The functions with `Mut` in are equivalently, except that they create a [mutating iterator](iterator.h.md#mutating-iterators). |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
251 | Removing elements via a mutating iterator will cause an invocation of the [destructor functions](collection.h.md#destructor-functions) for the removed element. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
252 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
253 | If is safe to specify an out-of-bounds index in which case an iterator is returned for which `cxIteratorValid()` returns `false`, immediately. |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
254 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
255 | ## Reorder |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
256 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
257 | ```C |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
258 | #include <cx/list.h> |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
259 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
260 | 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:
1190
diff
changeset
|
261 | |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
262 | void cxListReverse(CxList *list); |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
263 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
264 | void cxListSort(CxList *list); |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
265 | ``` |
1236
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
266 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
267 | 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:
1238
diff
changeset
|
268 | 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:
1238
diff
changeset
|
269 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
270 | The function `cxListReverse()` reorders all elements, so that they appear in exactly the opposite order after invoking this function. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
271 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
272 | 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:
1238
diff
changeset
|
273 | 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:
1238
diff
changeset
|
274 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
275 | 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:
1238
diff
changeset
|
276 | |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
277 | > 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:
1238
diff
changeset
|
278 | > Implementations usually make use of this flag to optimize search operations, if possible. |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
279 | > For example the [array list](array_list.h.md) implementation will use binary search |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
280 | > 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:
1190
diff
changeset
|
281 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
282 | ## Compare |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
283 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
284 | ```C |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
285 | #include <cx/list.h> |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
286 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
287 | 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:
1190
diff
changeset
|
288 | ``` |
f392f27a1dc6
list all function from list.h that need to be documented
Mike Becker <universe@uap-core.de>
parents:
1190
diff
changeset
|
289 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
290 | 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:
1237
diff
changeset
|
291 | |
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
292 | That means, you can compare an UCX [array list](array_list.h.md) with a [linked list](linked_list.h.md), |
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
293 | 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:
1237
diff
changeset
|
294 | |
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
295 | 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:
1238
diff
changeset
|
296 | 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:
1237
diff
changeset
|
297 | |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
298 | 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:
1237
diff
changeset
|
299 | 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:
1190
diff
changeset
|
300 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
301 | ## Dispose |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
302 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
303 | ```C |
1239
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
304 | #include <cx/list.h> |
b4b1f15d1866
complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1238
diff
changeset
|
305 | |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
306 | void cxListFree(CxList *list); |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
307 | ``` |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
308 | |
1238
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
309 | 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:
1237
diff
changeset
|
310 | |
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
311 | 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:
1238
diff
changeset
|
312 | 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:
1237
diff
changeset
|
313 | |
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
314 | When the list has been storing pointers, make sure that either another reference to the same memory exist in your program, |
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
315 | or any of the destructor functions deallocates the memory. |
26299ce9c955
documentation for list compare and dispose
Mike Becker <universe@uap-core.de>
parents:
1237
diff
changeset
|
316 | Otherwise, there is a risk of a memory leak. |
1237
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
317 | |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
318 | ## Implement own List Structures |
5cba456aff67
add structure to list documentation
Mike Becker <universe@uap-core.de>
parents:
1236
diff
changeset
|
319 | |
1240
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
320 | 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:
1239
diff
changeset
|
321 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
322 | You just need to define a function for creating your list and assign a `cx_list_class` structure with the pointers to your implementation. |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
323 | 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:
1239
diff
changeset
|
324 | This also automatically adds support for `CX_STORE_POINTERS` to your list. |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
325 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
326 | ```C |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
327 | // define the class with pointers to your functions |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
328 | static cx_list_class my_list_class = { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
329 | my_list_destructor, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
330 | my_list_insert_element, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
331 | my_list_insert_array, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
332 | my_list_insert_sorted, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
333 | my_list_insert_iter, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
334 | my_list_remove, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
335 | my_list_clear, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
336 | my_list_swap, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
337 | my_list_at, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
338 | my_list_find_remove, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
339 | my_list_sort, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
340 | my_list_compare, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
341 | my_list_reverse, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
342 | my_list_iterator, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
343 | }; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
344 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
345 | typedef struct { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
346 | struct cx_list_s base; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
347 | // your custom list data goes here |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
348 | } my_list; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
349 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
350 | CxList *my_list_create( |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
351 | const CxAllocator *allocator, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
352 | cx_compare_func cmpfun, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
353 | size_t elem_size |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
354 | ) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
355 | if (allocator == NULL) { |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
356 | allocator = cxDefaultAllocator; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
357 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
358 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
359 | my_list *list = cxCalloc(allocator, 1, sizeof(my_list)); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
360 | if (list == NULL) return NULL; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
361 | cx_list_init((CxList*)list, &my_list_class, |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
362 | allocator, cmpfun, elem_size); |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
363 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
364 | // initialize your custom list data here |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
365 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
366 | return (CxList *) list; |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
367 | } |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
368 | ``` |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
369 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
370 | The required behavior for the implementations is described in the following table. |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
371 | 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:
1239
diff
changeset
|
372 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
373 | | Function | Description | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
374 | |------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
375 | | `clear` | Invoke destructor functions on all elements and remove them from the list. | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
376 | | `destructor` | Invoke destructor functions on all elements and deallocate the entire list memory. | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
377 | | `insert_element` | Insert a single element at the specified index. Return zero on success and non-zero on failure. | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
378 | | `insert_array` | Insert an array of elements starting at the specified index. Return the number of elements inserted. | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
379 | | `insert_sorted` | Insert an array of sorted elements into a sorted list. Return the number of elements inserted. | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
380 | | `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:
1239
diff
changeset
|
381 | | `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:
1239
diff
changeset
|
382 | | `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:
1239
diff
changeset
|
383 | | `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:
1239
diff
changeset
|
384 | | `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:
1239
diff
changeset
|
385 | | `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:
1239
diff
changeset
|
386 | | `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:
1239
diff
changeset
|
387 | | `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:
1239
diff
changeset
|
388 | | `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:
1239
diff
changeset
|
389 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
390 | > If you initialize your list with `cx_list_init()` you do not have to worry about making a |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
391 | > difference between storing pointers and storing elements, because your implementation will |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
392 | > be automatically wrapped. |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
393 | > This means, you only have to handle the one single case described above. |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
394 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
395 | ### Default Class Function Implementations |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
396 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
397 | 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:
1239
diff
changeset
|
398 | Note, however, that those are not optimized for any specific list structure |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
399 | 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:
1239
diff
changeset
|
400 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
401 | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
402 | | Default Function | Description | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
403 | |---------------------------------|-----------------------------------------------------------------------------------| |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
404 | | `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:
1239
diff
changeset
|
405 | | `cx_list_default_insert_sorted` | Uses linear search to find insertion points. | |
c5924c781372
complete list.h documentation
Mike Becker <universe@uap-core.de>
parents:
1239
diff
changeset
|
406 | | `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:
1239
diff
changeset
|
407 | | `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:
1239
diff
changeset
|
408 | |
1142
9437530176bc
add symbols that need documentation as TODOs
Mike Becker <universe@uap-core.de>
parents:
1141
diff
changeset
|
409 | |
1190
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
410 | <seealso> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
411 | <category ref="apidoc"> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
412 | <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:
1146
diff
changeset
|
413 | </category> |
a7b913d5d589
bring incomplete docs into a shape that can be released
Mike Becker <universe@uap-core.de>
parents:
1146
diff
changeset
|
414 | </seealso> |