ucx
UAP Common Extensions
Loading...
Searching...
No Matches
mempool.h
Go to the documentation of this file.
1/*
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
3 *
4 * Copyright 2021 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 */
35
36#ifndef UCX_MEMPOOL_H
37#define UCX_MEMPOOL_H
38
39#include "common.h"
40#include "allocator.h"
41
59
67
70
72 void **data;
73
75 size_t size;
76
78 size_t capacity;
79
81 struct cx_mempool_foreign_memory_s *registered;
82
85
88
97
106
111};
112
116typedef struct cx_mempool_s CxMempool;
117
125
138
147#define cxMempoolCreateSimple(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_SIMPLE)
148
157#define cxMempoolCreateAdvanced(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_ADVANCED)
158
167#define cxMempoolCreatePure(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_PURE)
168
177
187
200
213void cxMempoolSetDestructor2(void *memory, cx_destructor_func2 fnc, void *data);
214
224void cxMempoolRemoveDestructor(void *memory);
225
235void cxMempoolRemoveDestructor2(void *memory);
236
254
276
294
310int cxMempoolTransferObject(CxMempool *source, CxMempool *dest, const void *obj);
311
312#endif // UCX_MEMPOOL_H
Interface for custom allocators.
void(* cx_destructor_func2)(void *data, void *memory)
Function pointer type for destructor functions.
Definition allocator.h:116
struct cx_allocator_s CxAllocator
High-Level type alias for the allocator type.
Definition allocator.h:80
void(* cx_destructor_func)(void *memory)
Function pointer type for destructor functions.
Definition allocator.h:103
Common definitions and feature checks.
#define CX_MALLOC
The attributed function always returns freshly allocated memory.
Definition common.h:156
#define CX_DEALLOC(...)
Not supported in clang.
Definition common.h:172
#define CX_NONNULL
All pointer arguments must be non-NULL.
Definition common.h:141
#define CX_NODISCARD
Warn about discarded return value.
Definition common.h:256
#define CX_NONNULL_ARG(...)
The specified pointer arguments must be non-NULL.
Definition common.h:146
#define CX_EXTERN
Declares a function with external linkage.
Definition common.h:297
int cxMempoolTransfer(CxMempool *source, CxMempool *dest)
Transfers all the memory managed by one pool to another.
int cxMempoolRegister2(CxMempool *pool, void *memory, cx_destructor_func2 destr, void *data)
Registers foreign memory with this pool.
void cxMempoolGlobalDestructor(CxMempool *pool, cx_destructor_func fnc)
Sets the global destructor for all memory blocks within the specified pool.
void cxMempoolSetDestructor2(void *memory, cx_destructor_func2 fnc, void *data)
Sets the destructor function for a specific allocated memory object.
void cxMempoolFree(CxMempool *pool)
Deallocates a memory pool and frees the managed memory.
void cxMempoolRemoveDestructor2(void *memory)
Removes the destructor function for a specific allocated memory object.
struct cx_mempool_s CxMempool
Common type for all memory pool implementations.
Definition mempool.h:116
CxMempool * cxMempoolCreate(size_t capacity, enum cx_mempool_type type)
Creates an array-based memory pool.
cx_mempool_type
Specifies how individual blocks are allocated.
Definition mempool.h:43
@ CX_MEMPOOL_TYPE_ADVANCED
Allows registration of cx_destructor_func2 for each memory block.
Definition mempool.h:51
@ CX_MEMPOOL_TYPE_PURE
No individual destructor registration allowed.
Definition mempool.h:57
@ CX_MEMPOOL_TYPE_SIMPLE
Allows registration of cx_destructor_func for each memory block.
Definition mempool.h:47
int cxMempoolTransferObject(CxMempool *source, CxMempool *dest, const void *obj)
Transfers an object from one pool to another.
void cxMempoolRemoveDestructor(void *memory)
Removes the destructor function for a specific allocated memory object.
int cxMempoolRegister(CxMempool *pool, void *memory, cx_destructor_func destr)
Registers foreign memory with this pool.
void cxMempoolSetDestructor(void *memory, cx_destructor_func fnc)
Sets the destructor function for a specific allocated memory object.
void cxMempoolGlobalDestructor2(CxMempool *pool, cx_destructor_func2 fnc, void *data)
Sets the global destructor for all memory blocks within the specified pool.
The basic structure of a memory pool.
Definition mempool.h:64
size_t capacity
Memory pool capacity.
Definition mempool.h:78
size_t registered_size
Number of registered memory items.
Definition mempool.h:84
const CxAllocator * allocator
The provided allocator.
Definition mempool.h:69
const CxAllocator *const base_allocator
The used allocator, initialized with the cxDefaultAllocator.
Definition mempool.h:66
cx_destructor_func2 destr2
A destructor that shall be called before deallocating a memory block.
Definition mempool.h:105
void ** data
Array of pooled memory.
Definition mempool.h:72
void * destr2_data
Additional data for the destr2.
Definition mempool.h:110
size_t size
Number of pooled memory items.
Definition mempool.h:75
cx_destructor_func destr
A destructor that shall be called before deallocating a memory block.
Definition mempool.h:96
size_t registered_capacity
Capacity for registered memory.
Definition mempool.h:87
struct cx_mempool_foreign_memory_s * registered
Array of registered memory.
Definition mempool.h:81