src/cx/mempool.h

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 1325
20caf6efaf07
child 1328
2cf66dee40b8
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

571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 * Copyright 2021 Mike Becker, Olaf Wintermann All rights reserved.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 */
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 /**
1103
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
29 * @file mempool.h
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
30 * @brief Interface for memory pool implementations.
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
31 * @author Mike Becker
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
32 * @author Olaf Wintermann
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
33 * @copyright 2-Clause BSD License
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34 */
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 #ifndef UCX_MEMPOOL_H
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 #define UCX_MEMPOOL_H
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38
681
502105523db7 fix common.h include problems - fixes #255
Mike Becker <universe@uap-core.de>
parents: 571
diff changeset
39 #include "common.h"
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
40 #include "allocator.h"
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
41
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 #ifdef __cplusplus
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 extern "C" {
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
44 #endif
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
45
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
46 struct cx_mempool_memory_s {
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
47 /** The destructor. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
48 cx_destructor_func destructor;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
49 /** The actual memory. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
50 char c[];
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
51 };
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
52
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
53 struct cx_mempool_memory2_s {
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
54 /** The destructor. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
55 cx_destructor_func2 destructor;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
56 /** Data for the destructor. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
57 void *data;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
58 /** The actual memory. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
59 char c[];
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
60 };
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
61
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
62 struct cx_mempool_foreign_memory_s {
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
63 /** The foreign memory. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
64 void* mem;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
65 union {
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
66 /** Simple destructor. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
67 cx_destructor_func destr;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
68 /** Advanced destructor. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
69 cx_destructor_func2 destr2;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
70 };
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
71 /** Data for the advanced destructor. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
72 void *destr2_data;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
73 };
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
74
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
75 /** Specifies how individual blocks are allocated. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
76 enum cx_mempool_type {
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
77 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
78 * Allows registration of cx_destructor_func for each memory block.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
79 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
80 CX_MEMPOOL_TYPE_SIMPLE,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
81 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
82 * Allows registration of cx_destructor_func2 for each memory block.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
83 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
84 CX_MEMPOOL_TYPE_ADVANCED,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
85 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
86 * No individual destructor registration allowed.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
87 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
88 * In this mode, no additional memory per block is allocated.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
89 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
90 CX_MEMPOOL_TYPE_PURE,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
91 };
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
92
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
93 /**
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
94 * The basic structure of a memory pool.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
95 * Should be the first member of an actual memory pool implementation.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
96 */
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
97 struct cx_mempool_s {
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
98 /** The provided allocator. */
890
54565fd74e74 move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents: 759
diff changeset
99 const CxAllocator *allocator;
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
100
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
101 /** Array of pooled memory. */
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
102 void **data;
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
103
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
104 /** Number of pooled memory items. */
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
105 size_t size;
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
106
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
107 /** Memory pool capacity. */
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
108 size_t capacity;
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
109
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
110 /** Array of registered memory. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
111 struct cx_mempool_foreign_memory_s *registered;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
112
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
113 /** Number of registered memory items. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
114 size_t registered_size;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
115
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
116 /** Capacity for registered memory. */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
117 size_t registered_capacity;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
118
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
119 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
120 * A destructor that shall be called before deallocating a memory block.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
121 * This destructor MUST NOT free the memory itself.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
122 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
123 * It is guaranteed that this destructor is called after the individual
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
124 * destructor of the memory block and before @c destr2.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
125 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
126 cx_destructor_func destr;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
127
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
128 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
129 * A destructor that shall be called before deallocating a memory block.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
130 * This destructor MUST NOT free the memory itself.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
131 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
132 * It is guaranteed that this destructor is called after the individual
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
133 * destructor of the memory block and @c destr.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
134 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
135 cx_destructor_func2 destr2;
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
136
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
137 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
138 * Additional data for the @c destr2.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
139 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
140 void *destr2_data;
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
141 };
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
142
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
143 /**
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
144 * Common type for all memory pool implementations.
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
145 */
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
146 typedef struct cx_mempool_s CxMempool;
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
147
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
148 /**
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
149 * Deallocates a memory pool and frees the managed memory.
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
150 *
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
151 * @param pool the memory pool to free
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
152 */
1180
4c3a69b9723a add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
153 cx_attr_export
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
154 void cxMempoolFree(CxMempool *pool);
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
155
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
156 /**
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
157 * Creates an array-based memory pool.
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
158 *
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
159 * The type determines how much additional memory is allocated per block
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
160 * to register a destructor function.
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
161 *
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
162 * @param capacity the initial capacity of the pool (an implementation default if zero)
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
163 * @param type the type of memory pool
1103
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
164 * @return the created memory pool or @c NULL if allocation failed
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
165 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
166 cx_attr_nodiscard
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
167 cx_attr_malloc
993
b642eca4b956 make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents: 985
diff changeset
168 cx_attr_dealloc(cxMempoolFree, 1)
1180
4c3a69b9723a add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
169 cx_attr_export
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
170 CxMempool *cxMempoolCreate(size_t capacity, enum cx_mempool_type type);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
171
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
172 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
173 * Sets the global destructor for all memory blocks within the specified pool.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
174 *
1325
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
175 * @param pool the memory pool
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
176 * @param fnc the destructor that shall be applied to all memory blocks
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
177 */
1325
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
178 cx_attr_nonnull_arg(1)
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
179 cx_attr_export
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
180 void cxMempoolGlobalDestructor(CxMempool *pool, cx_destructor_func fnc);
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
181
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
182 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
183 * Sets the global destructor for all memory blocks within the specified pool.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
184 *
1325
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
185 * @param pool the memory pool
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
186 * @param fnc the destructor that shall be applied to all memory blocks
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
187 * @param data additional data for the destructor function
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
188 */
1325
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
189 cx_attr_nonnull_arg(1)
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
190 cx_attr_export
20caf6efaf07 improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents: 1323
diff changeset
191 void cxMempoolGlobalDestructor2(CxMempool *pool, cx_destructor_func2 fnc, void *data);
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
192
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
193 /**
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
194 * Creates a basic array-based memory pool.
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
195 *
1103
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
196 * @param capacity (@c size_t) the initial capacity of the pool
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
197 * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
198 */
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
199 #define cxMempoolCreateSimple(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_SIMPLE)
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
200
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
201 /**
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
202 * Sets the destructor function for a specific allocated memory object.
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
203 *
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
204 * If the type of memory pool is not #CX_MEMPOOL_TYPE_SIMPLE, the behavior is undefined.
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
205 * If the memory is not managed by a UCX memory pool, the behavior is undefined.
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
206 * The destructor MUST NOT free the memory.
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
207 *
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
208 * @param memory the object allocated in the pool
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
209 * @param fnc the destructor function
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
210 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
211 cx_attr_nonnull
1180
4c3a69b9723a add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
212 cx_attr_export
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
213 void cxMempoolSetDestructor(
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
214 void *memory,
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
215 cx_destructor_func fnc
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
216 );
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
217
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
218 /**
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
219 * Sets the destructor function for a specific allocated memory object.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
220 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
221 * If the type of memory pool is not #CX_MEMPOOL_TYPE_ADVANCED, the behavior is undefined.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
222 * If the memory is not managed by a UCX memory pool, the behavior is undefined.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
223 * The destructor MUST NOT free the memory.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
224 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
225 * @param memory the object allocated in the pool
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
226 * @param fnc the destructor function
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
227 * @param data additional data for the destructor function
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
228 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
229 cx_attr_nonnull
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
230 cx_attr_export
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
231 void cxMempoolSetDestructor2(
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
232 void *memory,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
233 cx_destructor_func2 fnc,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
234 void *data
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
235 );
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
236
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
237 /**
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
238 * Removes the destructor function for a specific allocated memory object.
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
239 *
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
240 * If the type of memory pool is not #CX_MEMPOOL_TYPE_SIMPLE, the behavior is undefined.
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
241 * If the memory is not managed by a UCX memory pool, the behavior is undefined.
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
242 *
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
243 * @param memory the object allocated in the pool
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
244 */
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
245 cx_attr_nonnull
1180
4c3a69b9723a add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
246 cx_attr_export
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
247 void cxMempoolRemoveDestructor(void *memory);
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
248
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
249 /**
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
250 * Removes the destructor function for a specific allocated memory object.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
251 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
252 * If the type of memory pool is not #CX_MEMPOOL_TYPE_ADVANCED, the behavior is undefined.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
253 * If the memory is not managed by a UCX memory pool, the behavior is undefined.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
254 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
255 * @param memory the object allocated in the pool
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
256 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
257 cx_attr_nonnull
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
258 cx_attr_export
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
259 void cxMempoolRemoveDestructor2(void *memory);
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
260
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
261 /**
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
262 * Registers foreign memory with this pool.
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
263 *
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
264 * The destructor, in contrast to memory allocated by the pool, MUST free the memory.
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
265 * This function can be used with any pool of any type, since destructors for registered memory
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
266 * are entirely independent of the pool's memory management.
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
267 *
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
268 * The destructor for the registered memory will be called after all pooled items have been freed.
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
269 *
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
270 * @param pool the pool
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
271 * @param memory the object to register (MUST NOT be already allocated in the pool)
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
272 * @param destr the destructor function
1103
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
273 * @retval zero success
7c1e322b9165 refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents: 993
diff changeset
274 * @retval non-zero failure
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
275 */
985
68754c7de906 major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents: 890
diff changeset
276 cx_attr_nonnull
1180
4c3a69b9723a add support for building windows DLLs - resolves #582
Mike Becker <universe@uap-core.de>
parents: 1178
diff changeset
277 cx_attr_export
727
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
278 int cxMempoolRegister(
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
279 CxMempool *pool,
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
280 void *memory,
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
281 cx_destructor_func destr
d92a59f5d261 improve mempool implementation
Mike Becker <universe@uap-core.de>
parents: 681
diff changeset
282 );
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
283
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
284
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
285 /**
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
286 * Registers foreign memory with this pool.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
287 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
288 * The destructor, in contrast to memory allocated by the pool, MUST free the memory.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
289 * This function can be used with any pool of any type, since destructors for registered memory
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
290 * are entirely independent of the pool's memory management.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
291 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
292 * The destructor for the registered memory will be called after all pooled items have been freed.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
293 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
294 * @attention The data pointer MUST NOT be @c NULL.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
295 * If you wish to register a destructor without additional data, use cxMempoolRegister().
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
296 *
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
297 * @param pool the pool
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
298 * @param memory the object to register (MUST NOT be already allocated in the pool)
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
299 * @param destr the destructor function
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
300 * @param data additional data for the destructor function
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
301 * @retval zero success
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
302 * @retval non-zero failure
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
303 */
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
304 cx_attr_nonnull
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
305 cx_attr_export
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
306 int cxMempoolRegister2(
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
307 CxMempool *pool,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
308 void *memory,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
309 cx_destructor_func2 destr,
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
310 void *data
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
311 );
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
312
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
313 /**
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
314 * Transfers all the memory managed by one pool to another.
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
315 *
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
316 * The allocator of the source pool will also be transferred and registered with the destination pool
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
317 * and stays valid, as long as the destination pool is not destroyed.
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
318 *
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
319 * The source pool will get a completely new allocator and can be reused or destroyed afterward.
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
320 *
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
321 * This function fails when the destination pool has a different type than the source pool.
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
322 *
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
323 * @param source the pool to move the memory from
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
324 * @param dest the pool where to transfer the memory to
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
325 * @retval zero success
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
326 * @retval non-zero allocation failure or incompatible pools
1281
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
327 */
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
328 cx_attr_nonnull
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
329 cx_attr_export
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
330 int cxMempoolTransfer(
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
331 CxMempool *source,
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
332 CxMempool *dest
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
333 );
45746a08c59e add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents: 1180
diff changeset
334
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
335 /**
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
336 * Transfers an object from one pool to another.
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
337 *
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
338 * This function fails when the destination pool has a different type than the source pool.
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
339 *
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
340 * @attention If the object maintains a reference to the pool's allocator,
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
341 * you must make sure to update that reference to the allocator of the destination pool.
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
342 *
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
343 * @param source the pool to move the memory from
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
344 * @param dest the pool where to transfer the memory to
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
345 * @param obj pointer to the object that shall be transferred
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
346 * @retval zero success
1323
deccdb82f24e improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents: 1283
diff changeset
347 * @retval non-zero failure, or the object was not found in the source pool, or the pools are incompatible
1283
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
348 */
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
349 cx_attr_nonnull
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
350 cx_attr_export
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
351 int cxMempoolTransferObject(
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
352 CxMempool *source,
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
353 CxMempool *dest,
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
354 const void *obj
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
355 );
89935fea4b7c add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents: 1281
diff changeset
356
571
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
357 #ifdef __cplusplus
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
358 } // extern "C"
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
359 #endif
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
360
f83583a0bbac #201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff changeset
361 #endif // UCX_MEMPOOL_H

mercurial