| 41 |
41 |
| 42 #ifdef __cplusplus |
42 #ifdef __cplusplus |
| 43 extern "C" { |
43 extern "C" { |
| 44 #endif |
44 #endif |
| 45 |
45 |
| |
46 /** A memory block in a simple memory pool. */ |
| 46 struct cx_mempool_memory_s { |
47 struct cx_mempool_memory_s { |
| 47 /** The destructor. */ |
48 /** The destructor. */ |
| 48 cx_destructor_func destructor; |
49 cx_destructor_func destructor; |
| 49 /** The actual memory. */ |
50 /** The actual memory. */ |
| 50 char c[]; |
51 char c[]; |
| 51 }; |
52 }; |
| 52 |
53 |
| |
54 /** A memory block in an advanced memory pool. */ |
| 53 struct cx_mempool_memory2_s { |
55 struct cx_mempool_memory2_s { |
| 54 /** The destructor. */ |
56 /** The destructor. */ |
| 55 cx_destructor_func2 destructor; |
57 cx_destructor_func2 destructor; |
| 56 /** Data for the destructor. */ |
58 /** Data for the destructor. */ |
| 57 void *data; |
59 void *data; |
| 58 /** The actual memory. */ |
60 /** The actual memory. */ |
| 59 char c[]; |
61 char c[]; |
| 60 }; |
62 }; |
| 61 |
63 |
| |
64 /** Represents memory that is not allocated by, but registered with a pool. */ |
| 62 struct cx_mempool_foreign_memory_s { |
65 struct cx_mempool_foreign_memory_s { |
| 63 /** The foreign memory. */ |
66 /** The foreign memory. */ |
| 64 void* mem; |
67 void* mem; |
| 65 union { |
68 union { |
| 66 /** Simple destructor. */ |
69 /** Simple destructor. */ |
| 168 cx_attr_dealloc(cxMempoolFree, 1) |
171 cx_attr_dealloc(cxMempoolFree, 1) |
| 169 cx_attr_export |
172 cx_attr_export |
| 170 CxMempool *cxMempoolCreate(size_t capacity, enum cx_mempool_type type); |
173 CxMempool *cxMempoolCreate(size_t capacity, enum cx_mempool_type type); |
| 171 |
174 |
| 172 /** |
175 /** |
| |
176 * Creates a basic array-based memory pool. |
| |
177 * |
| |
178 * Convenience macro to create a memory pool of type #CX_MEMPOOL_TYPE_SIMPLE. |
| |
179 * |
| |
180 * @param capacity (@c size_t) the initial capacity of the pool |
| |
181 * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
| |
182 */ |
| |
183 #define cxMempoolCreateSimple(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_SIMPLE) |
| |
184 |
| |
185 /** |
| |
186 * Creates a basic array-based memory pool. |
| |
187 * |
| |
188 * Convenience macro to create a memory pool of type #CX_MEMPOOL_TYPE_ADVANCED. |
| |
189 * |
| |
190 * @param capacity (@c size_t) the initial capacity of the pool |
| |
191 * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
| |
192 */ |
| |
193 #define cxMempoolCreateAdvanced(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_ADVANCED) |
| |
194 |
| |
195 /** |
| |
196 * Creates a basic array-based memory pool. |
| |
197 * |
| |
198 * Convenience macro to create a memory pool of type #CX_MEMPOOL_TYPE_PURE. |
| |
199 * |
| |
200 * @param capacity (@c size_t) the initial capacity of the pool |
| |
201 * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
| |
202 */ |
| |
203 #define cxMempoolCreatePure(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_PURE) |
| |
204 |
| |
205 /** |
| 173 * Sets the global destructor for all memory blocks within the specified pool. |
206 * Sets the global destructor for all memory blocks within the specified pool. |
| 174 * |
207 * |
| 175 * @param pool the memory pool |
208 * @param pool the memory pool |
| 176 * @param fnc the destructor that shall be applied to all memory blocks |
209 * @param fnc the destructor that shall be applied to all memory blocks |
| 177 */ |
210 */ |
| 187 * @param data additional data for the destructor function |
220 * @param data additional data for the destructor function |
| 188 */ |
221 */ |
| 189 cx_attr_nonnull_arg(1) |
222 cx_attr_nonnull_arg(1) |
| 190 cx_attr_export |
223 cx_attr_export |
| 191 void cxMempoolGlobalDestructor2(CxMempool *pool, cx_destructor_func2 fnc, void *data); |
224 void cxMempoolGlobalDestructor2(CxMempool *pool, cx_destructor_func2 fnc, void *data); |
| 192 |
|
| 193 /** |
|
| 194 * Creates a basic array-based memory pool. |
|
| 195 * |
|
| 196 * @param capacity (@c size_t) the initial capacity of the pool |
|
| 197 * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
|
| 198 */ |
|
| 199 #define cxMempoolCreateSimple(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_SIMPLE) |
|
| 200 |
225 |
| 201 /** |
226 /** |
| 202 * Sets the destructor function for a specific allocated memory object. |
227 * Sets the destructor function for a specific allocated memory object. |
| 203 * |
228 * |
| 204 * If the type of memory pool is not #CX_MEMPOOL_TYPE_SIMPLE, the behavior is undefined. |
229 * If the type of memory pool is not #CX_MEMPOOL_TYPE_SIMPLE, the behavior is undefined. |