Fri, 23 May 2025 12:44:24 +0200
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 |