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
49
59
73
91
144
148typedef struct cx_mempool_s CxMempool;
149
157
170
179#define cxMempoolCreateSimple(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_SIMPLE)
180
189#define cxMempoolCreateAdvanced(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_ADVANCED)
190
199#define cxMempoolCreatePure(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_PURE)
200
209
219
232
245void cxMempoolSetDestructor2(void *memory, cx_destructor_func2 fnc, void *data);
246
256void cxMempoolRemoveDestructor(void *memory);
257
267void cxMempoolRemoveDestructor2(void *memory);
268
286
308
326
342int cxMempoolTransferObject(CxMempool *source, CxMempool *dest, const void *obj);
343
344#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:148
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:75
@ CX_MEMPOOL_TYPE_ADVANCED
Allows registration of cx_destructor_func2 for each memory block.
Definition mempool.h:83
@ CX_MEMPOOL_TYPE_PURE
No individual destructor registration allowed.
Definition mempool.h:89
@ CX_MEMPOOL_TYPE_SIMPLE
Allows registration of cx_destructor_func for each memory block.
Definition mempool.h:79
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.
Represents memory that is not allocated by, but registered with a pool.
Definition mempool.h:61
void * destr2_data
Data for the advanced destructor.
Definition mempool.h:71
void * mem
The foreign memory.
Definition mempool.h:63
cx_destructor_func destr
Simple destructor.
Definition mempool.h:66
cx_destructor_func2 destr2
Advanced destructor.
Definition mempool.h:68
A memory block in an advanced memory pool.
Definition mempool.h:51
void * data
Data for the destructor.
Definition mempool.h:55
char c[]
The actual memory.
Definition mempool.h:57
cx_destructor_func2 destructor
The destructor.
Definition mempool.h:53
A memory block in a simple memory pool.
Definition mempool.h:43
char c[]
The actual memory.
Definition mempool.h:47
cx_destructor_func destructor
The destructor.
Definition mempool.h:45
The basic structure of a memory pool.
Definition mempool.h:96
size_t capacity
Memory pool capacity.
Definition mempool.h:110
size_t registered_size
Number of registered memory items.
Definition mempool.h:116
const CxAllocator * allocator
The provided allocator.
Definition mempool.h:101
const CxAllocator *const base_allocator
The used allocator, initialized with the cxDefaultAllocator.
Definition mempool.h:98
cx_destructor_func2 destr2
A destructor that shall be called before deallocating a memory block.
Definition mempool.h:137
void ** data
Array of pooled memory.
Definition mempool.h:104
void * destr2_data
Additional data for the destr2.
Definition mempool.h:142
size_t size
Number of pooled memory items.
Definition mempool.h:107
cx_destructor_func destr
A destructor that shall be called before deallocating a memory block.
Definition mempool.h:128
size_t registered_capacity
Capacity for registered memory.
Definition mempool.h:119
struct cx_mempool_foreign_memory_s * registered
Array of registered memory.
Definition mempool.h:113