ucx
UAP Common Extensions
Loading...
Searching...
No Matches
collection.h
Go to the documentation of this file.
1/*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2023 Mike Becker, Olaf Wintermann All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are met:
8 *
9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 *
12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26 * POSSIBILITY OF SUCH DAMAGE.
27 */
36#ifndef UCX_COLLECTION_H
37#define UCX_COLLECTION_H
38
39#include "allocator.h"
40#include "iterator.h"
41#include "compare.h"
42
43#ifdef __cplusplus
44extern "C" {
45#endif
46
50#define CX_STORE_POINTERS 0
51
101
113#define CX_COLLECTION_BASE struct cx_collection_s collection
114
121#define cxCollectionSize(c) ((c)->collection.size)
122
131#define cxCollectionElementSize(c) ((c)->collection.elem_size)
132
140#define cxCollectionStoresPointers(c) ((c)->collection.store_pointer)
141
152#define cxCollectionSorted(c) ((c)->collection.sorted)
153
160#define cxDefineDestructor(c, destr) \
161 (c)->collection.simple_destructor = (cx_destructor_func) destr
162
169#define cxDefineAdvancedDestructor(c, destr, data) \
170 (c)->collection.advanced_destructor = (cx_destructor_func2) destr; \
171 (c)->collection.destructor_data = data
172
185#define cx_invoke_simple_destructor(c, e) \
186 (c)->collection.simple_destructor((c)->collection.store_pointer ? (*((void **) (e))) : (e))
187
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))
203
204
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)
220
221#ifdef __cplusplus
222} // extern "C"
223#endif
224
225#endif // UCX_COLLECTION_H
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