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: 
1141diff
changeset | 1 | # Collections | 
| 1141 | 2 | |
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 3 | UCX defines common attributes for collections. | 
| 1141 | 4 | If you want to implement an own collection data type that uses the same features, you can use the | 
| 5 | `CX_COLLECTION_BASE` macro at the beginning of your struct to roll out all members a usual UCX collection has. | |
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 6 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 7 | This macro will embed a structure in your collection that can be accessed with the member name `collection`. | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 8 | |
| 1141 | 9 | ```c | 
| 1215 
790ff923f375
add iterator documentation
 Mike Becker <universe@uap-core.de> parents: 
1171diff
changeset | 10 | #include <cx/collection.h> | 
| 
790ff923f375
add iterator documentation
 Mike Becker <universe@uap-core.de> parents: 
1171diff
changeset | 11 | |
| 1141 | 12 | struct my_fancy_collection_s { | 
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 13 | CX_COLLECTION_BASE; // adds a member named 'collection' | 
| 1141 | 14 | struct my_collection_data_s *data; | 
| 15 | }; | |
| 16 | ``` | |
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 17 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 18 | > You can always look at the UCX list and map implementations if you need some inspiration. | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 19 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 20 | ## Base Attributes of a Collection | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 21 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 22 | The following attributes are declared by the `CX_COLLECTION_BASE` macro: | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 23 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 24 | | Attribute | Description | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 25 | |-----------------------|----------------------------------------------------------------------------------------------------------------| | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 26 | | `allocator` | The [allocator](allocator.h.md) that shall be used for the collection data. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 27 | | `cmpfunc` | A function to [compare](compare.h.md) two elements. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 28 | | `elem_size` | The size of one element in bytes. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 29 | | `size` | The size, meaning the number of elements, currently stored. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 30 | | `simple_destructor` | An optional simple [destructor function](allocator.h.md#destructor-functions). | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 31 | | `advanced_destructor` | An optional advanced destructor function. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 32 | | `destructor_data` | A pointer to the custom data that shall be passed to the advanced destructor. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 33 | | `store_pointer` | A `bool` indicating whether this collection stores pointers instead of the element's data. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 34 | | `sorted` | A `bool` indicating whether the elements are currently guaranteed sorted with respect to the compare function. | | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 35 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 36 | The attributes can be accessed directly via the `collection` member of your struct, or with the following convenience macros. | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 37 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 38 | ```C | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 39 | cxCollectionSize(c) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 40 | cxCollectionElementSize(c) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 41 | cxCollectionStoresPointers(c) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 42 | cxCollectionSorted(c) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 43 | ``` | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 44 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 45 | In each case the argument `c` is a pointer to your collection. The macro will then access the base data with `c->collection`. | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 46 | |
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1215diff
changeset | 47 | ## Destructor Functions | 
| 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1215diff
changeset | 48 | |
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 49 | For working with destructors, the following macros are defined: | 
| 1141 | 50 | |
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 51 | ```C | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 52 | cxDefineDestructor(c, destr) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 53 | cxDefineAdvancedDestructor(c, destr, data) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 54 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 55 | // use in your collection's implementation | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 56 | cx_invoke_destructor(c, elem) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 57 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 58 | // the following two should not be used | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 59 | cx_invoke_simple_destructor(c, elem) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 60 | cx_invoke_advanced_destructor(c, elem) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 61 | ``` | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 62 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 63 | With `cxDefineDestructor()` you can assign a simple [destructor function](allocator.h.md#destructor-functions) | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 64 | to an _instance_ of your collection. | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 65 | Similarly, you can assign an advanced destructor with custom `data` by using `cxDefineAdvancedDestructor`. | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 66 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 67 | Your collection _should_ be supporting destructors by invoking `cx_invoke_destructor()` whenever an element | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 68 | is removed from your collection _without_ being returned to the caller. | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 69 | This macro will invoke a simple destructor, if one is assigned, first, and then the advanced destructor (again, if assigned). | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 70 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 71 | > Destructor functions are always invoked with a pointer to the element in your collection. | 
| 1239 
b4b1f15d1866
complete more than 80% of the list.h documentation
 Mike Becker <universe@uap-core.de> parents: 
1215diff
changeset | 72 | > If your collection is storing pointers (i.e. `cxCollectionStoresPointers()` returns `true`) | 
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 73 | > the `cx_invoke_destructor()` will make sure that the pointer to the element is dereferenced first, | 
| 1424 
563033aa998c
fixes tons of typos and grammar issues across the documentation - fixes #667
 Mike Becker <universe@uap-core.de> parents: 
1239diff
changeset | 74 | > so that the destructor functions are _always_ invoked with a pointer to the actual element. | 
| 1171 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 75 | {style="note"} | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 76 | |
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 77 | <seealso> | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 78 | <category ref="apidoc"> | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 79 | <a href="https://ucx.sourceforge.io/api/collection_8h.html">collection.h</a> | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 80 | </category> | 
| 
155bc3b0dcb3
adds documentation for destructor functions and collections
 Mike Becker <universe@uap-core.de> parents: 
1146diff
changeset | 81 | </seealso> |