36#ifndef UCX_COLLECTION_H
37#define UCX_COLLECTION_H
50#define CX_STORE_POINTERS 0
113#define CX_COLLECTION_BASE struct cx_collection_s collection
121#define cxCollectionSize(c) ((c)->collection.size)
131#define cxCollectionElementSize(c) ((c)->collection.elem_size)
140#define cxCollectionStoresPointers(c) ((c)->collection.store_pointer)
152#define cxCollectionSorted(c) ((c)->collection.sorted)
160#define cxDefineDestructor(c, destr) \
161 (c)->collection.simple_destructor = (cx_destructor_func) destr
169#define cxDefineAdvancedDestructor(c, destr, data) \
170 (c)->collection.advanced_destructor = (cx_destructor_func2) destr; \
171 (c)->collection.destructor_data = data
185#define cx_invoke_simple_destructor(c, e) \
186 (c)->collection.simple_destructor((c)->collection.store_pointer ? (*((void **) (e))) : (e))
200#define cx_invoke_advanced_destructor(c, e) \
201 (c)->collection.advanced_destructor((c)->collection.destructor_data, \
202 (c)->collection.store_pointer ? (*((void **) (e))) : (e))
217#define cx_invoke_destructor(c, e) \
218 if ((c)->collection.simple_destructor) cx_invoke_simple_destructor(c,e); \
219 if ((c)->collection.advanced_destructor) cx_invoke_advanced_destructor(c,e)
Interface for custom allocators.
void(* cx_destructor_func2)(void *data, void *memory)
Function pointer type for destructor functions.
Definition allocator.h:129
void(* cx_destructor_func)(void *memory)
Function pointer type for destructor functions.
Definition allocator.h:116
A collection of simple compare functions.
int(* cx_compare_func)(const void *left, const void *right)
A comparator function comparing two arbitrary values.
Definition compare.h:60
Interface for iterator implementations.
Structure holding the data for an allocator.
Definition allocator.h:84
Base attributes of a collection.
Definition collection.h:55
bool sorted
Indicates if this collection is guaranteed to be sorted.
Definition collection.h:99
const CxAllocator * allocator
The allocator to use.
Definition collection.h:59
cx_destructor_func simple_destructor
An optional simple destructor for the collection's elements.
Definition collection.h:78
size_t elem_size
The size of each element.
Definition collection.h:67
bool store_pointer
Indicates if this list is supposed to store pointers instead of copies of the actual objects.
Definition collection.h:94
size_t size
The number of currently stored elements.
Definition collection.h:71
cx_destructor_func2 advanced_destructor
An optional advanced destructor for the collection's elements.
Definition collection.h:85
cx_compare_func cmpfunc
The comparator function for the elements.
Definition collection.h:63
void * destructor_data
The pointer to additional data that is passed to the advanced destructor.
Definition collection.h:89