docs/Writerside/topics/collection.h.md

Fri, 23 May 2025 12:44:24 +0200

author
Mike Becker <universe@uap-core.de>
date
Fri, 23 May 2025 12:44:24 +0200
changeset 1327
ed75dc1db503
parent 1239
b4b1f15d1866
permissions
-rw-r--r--

make test-compile depend on both static and shared

the shared lib is not needed for the tests,
but when run with coverage, gcov will be confused
when outdated line information is available from
a previous shared build

1143
0559812df10c assign proper names to the documentation topics
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
1 # Collections
1141
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2
1171
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
3 UCX defines common attributes for collections.
1141
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 If you want to implement an own collection data type that uses the same features, you can use the
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
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: 1146
diff changeset
6
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
8
1141
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 ```c
1215
790ff923f375 add iterator documentation
Mike Becker <universe@uap-core.de>
parents: 1171
diff changeset
10 #include <cx/collection.h>
790ff923f375 add iterator documentation
Mike Becker <universe@uap-core.de>
parents: 1171
diff changeset
11
1141
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 struct my_fancy_collection_s {
1171
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
13 CX_COLLECTION_BASE; // adds a member named 'collection'
1141
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 struct my_collection_data_s *data;
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 };
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 ```
1171
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
17
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
19
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
20 ## Base Attributes of a Collection
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
21
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
23
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
24 | Attribute | Description |
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
25 |-----------------------|----------------------------------------------------------------------------------------------------------------|
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff 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: 1146
diff 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: 1146
diff 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: 1146
diff 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: 1146
diff changeset
31 | `advanced_destructor` | An optional advanced destructor function. |
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff 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: 1146
diff 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: 1146
diff changeset
35
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
37
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
38 ```C
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
39 cxCollectionSize(c)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
40 cxCollectionElementSize(c)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
41 cxCollectionStoresPointers(c)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
42 cxCollectionSorted(c)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
43 ```
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
44
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
46
1239
b4b1f15d1866 complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents: 1215
diff changeset
47 ## Destructor Functions
b4b1f15d1866 complete more than 80% of the list.h documentation
Mike Becker <universe@uap-core.de>
parents: 1215
diff changeset
48
1171
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
49 For working with destructors, the following macros are defined:
1141
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
50
1171
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
51 ```C
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
52 cxDefineDestructor(c, destr)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
53 cxDefineAdvancedDestructor(c, destr, data)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
54
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
55 // use in your collection's implementation
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
56 cx_invoke_destructor(c, elem)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
57
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
58 // the following two should not be used
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
59 cx_invoke_simple_destructor(c, elem)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
60 cx_invoke_advanced_destructor(c, elem)
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
61 ```
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
62
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
64 to an _instance_ of your collection.
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
66
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff 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: 1146
diff 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: 1146
diff changeset
70
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1215
diff 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: 1146
diff changeset
73 > the `cx_invoke_destructor()` will make sure that the pointer to the element is dereferenced first,
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
74 > so that the destructor functions are _always_ invoked with pointer to the actual element.
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
75 {style="note"}
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
76
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
77 <seealso>
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
78 <category ref="apidoc">
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff 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: 1146
diff changeset
80 </category>
155bc3b0dcb3 adds documentation for destructor functions and collections
Mike Becker <universe@uap-core.de>
parents: 1146
diff changeset
81 </seealso>

mercurial