Sun, 23 Nov 2025 13:15:19 +0100
optimize sorted insertion by using the infimum instead of the supremum
The reason is that the supremum returns the equal element with the smallest index, and we want the largest.
Therefore, we use the infimum, which already gives us the largest index when there are equal elements, and increase the index by one. The infimum is also guaranteed to exist in that case.
|
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 | |
|
1328
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
46 | /** A memory block in a simple memory pool. */ |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
47 | struct cx_mempool_memory_s { |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
48 | /** The destructor. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
49 | cx_destructor_func destructor; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
50 | /** The actual memory. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
51 | char c[]; |
|
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 | |
|
1328
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
54 | /** A memory block in an advanced memory pool. */ |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
55 | struct cx_mempool_memory2_s { |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
56 | /** The destructor. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
57 | cx_destructor_func2 destructor; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
58 | /** Data for the destructor. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
59 | void *data; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
60 | /** The actual memory. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
61 | char c[]; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
62 | }; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
63 | |
|
1328
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
64 | /** Represents memory that is not allocated by, but registered with a pool. */ |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
65 | struct cx_mempool_foreign_memory_s { |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
66 | /** The foreign memory. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
67 | void* mem; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
68 | union { |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
69 | /** Simple destructor. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
70 | cx_destructor_func destr; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
71 | /** Advanced destructor. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
72 | cx_destructor_func2 destr2; |
|
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 | /** Data for the advanced destructor. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
75 | void *destr2_data; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
76 | }; |
|
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 | /** Specifies how individual blocks are allocated. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
79 | enum cx_mempool_type { |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
80 | /** |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
81 | * 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
|
82 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
83 | CX_MEMPOOL_TYPE_SIMPLE, |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
84 | /** |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
85 | * 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
|
86 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
87 | CX_MEMPOOL_TYPE_ADVANCED, |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
88 | /** |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
89 | * No individual destructor registration allowed. |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
90 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
91 | * 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
|
92 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
93 | CX_MEMPOOL_TYPE_PURE, |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
94 | }; |
|
571
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
95 | |
|
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 | * The basic structure of a memory pool. |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
98 | * 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
|
99 | */ |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
100 | struct cx_mempool_s { |
|
1329
343eac5ac824
add base allocator to mempool
Mike Becker <universe@uap-core.de>
parents:
1328
diff
changeset
|
101 | /** The used allocator, initialized with the cxDefaultAllocator. */ |
|
343eac5ac824
add base allocator to mempool
Mike Becker <universe@uap-core.de>
parents:
1328
diff
changeset
|
102 | const CxAllocator * const base_allocator; |
|
343eac5ac824
add base allocator to mempool
Mike Becker <universe@uap-core.de>
parents:
1328
diff
changeset
|
103 | |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
104 | /** The provided allocator. */ |
|
890
54565fd74e74
move all const keywords to the west - fixes #426
Mike Becker <universe@uap-core.de>
parents:
759
diff
changeset
|
105 | const CxAllocator *allocator; |
|
727
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 | /** Array of pooled memory. */ |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
108 | void **data; |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
109 | |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
110 | /** Number of pooled memory items. */ |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
111 | size_t size; |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
112 | |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
113 | /** Memory pool capacity. */ |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
114 | size_t capacity; |
|
1323
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 | /** Array of registered memory. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
117 | struct cx_mempool_foreign_memory_s *registered; |
|
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 | /** Number of registered memory items. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
120 | size_t registered_size; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
121 | |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
122 | /** Capacity for registered memory. */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
123 | size_t registered_capacity; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
124 | |
|
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 | * 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
|
127 | * 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
|
128 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
129 | * 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
|
130 | * 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
|
131 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
132 | cx_destructor_func destr; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
133 | |
|
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 | * 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
|
136 | * 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
|
137 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
138 | * 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
|
139 | * 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
|
140 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
141 | cx_destructor_func2 destr2; |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
142 | |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
143 | /** |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
144 | * Additional data for the @c destr2. |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
145 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
146 | void *destr2_data; |
|
571
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 | |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
149 | /** |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
150 | * Common type for all memory pool implementations. |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
151 | */ |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
152 | typedef struct cx_mempool_s CxMempool; |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
153 | |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
154 | /** |
|
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
155 | * 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
|
156 | * |
|
993
b642eca4b956
make names of destroy and free functions consistent - fixes #484
Mike Becker <universe@uap-core.de>
parents:
985
diff
changeset
|
157 | * @param pool the memory pool to free |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
158 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
159 | CX_EXPORT void cxMempoolFree(CxMempool *pool); |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
160 | |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
161 | /** |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
162 | * Creates an array-based memory pool. |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
163 | * |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
164 | * 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
|
165 | * to register a destructor function. |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
166 | * |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
167 | * @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
|
168 | * @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
|
169 | * @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
|
170 | */ |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
171 | cx_attr_nodiscard cx_attr_malloc cx_attr_dealloc(cxMempoolFree, 1) |
|
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
172 | CX_EXPORT CxMempool *cxMempoolCreate(size_t capacity, enum cx_mempool_type type); |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
173 | |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
174 | /** |
|
1328
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
175 | * Creates a basic array-based memory pool. |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
176 | * |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
177 | * Convenience macro to create a memory pool of type #CX_MEMPOOL_TYPE_SIMPLE. |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
178 | * |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
179 | * @param capacity (@c size_t) the initial capacity of the pool |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
180 | * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
181 | */ |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
182 | #define cxMempoolCreateSimple(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_SIMPLE) |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
183 | |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
184 | /** |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
185 | * Creates a basic array-based memory pool. |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
186 | * |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
187 | * Convenience macro to create a memory pool of type #CX_MEMPOOL_TYPE_ADVANCED. |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
188 | * |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
189 | * @param capacity (@c size_t) the initial capacity of the pool |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
190 | * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
191 | */ |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
192 | #define cxMempoolCreateAdvanced(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_ADVANCED) |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
193 | |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
194 | /** |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
195 | * Creates a basic array-based memory pool. |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
196 | * |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
197 | * Convenience macro to create a memory pool of type #CX_MEMPOOL_TYPE_PURE. |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
198 | * |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
199 | * @param capacity (@c size_t) the initial capacity of the pool |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
200 | * @return (@c CxMempool*) the created memory pool or @c NULL if allocation failed |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
201 | */ |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
202 | #define cxMempoolCreatePure(capacity) cxMempoolCreate(capacity, CX_MEMPOOL_TYPE_PURE) |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
203 | |
|
2cf66dee40b8
stabilizes mempool implementation
Mike Becker <universe@uap-core.de>
parents:
1325
diff
changeset
|
204 | /** |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
205 | * 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
|
206 | * |
|
1325
20caf6efaf07
improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents:
1323
diff
changeset
|
207 | * @param pool the memory pool |
|
20caf6efaf07
improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents:
1323
diff
changeset
|
208 | * @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
|
209 | */ |
|
1325
20caf6efaf07
improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents:
1323
diff
changeset
|
210 | cx_attr_nonnull_arg(1) |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
211 | CX_EXPORT 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
|
212 | |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
213 | /** |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
214 | * 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
|
215 | * |
|
1325
20caf6efaf07
improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents:
1323
diff
changeset
|
216 | * @param pool the memory pool |
|
20caf6efaf07
improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents:
1323
diff
changeset
|
217 | * @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
|
218 | * @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
|
219 | */ |
|
1325
20caf6efaf07
improve mempool destructor support (3/3)
Mike Becker <universe@uap-core.de>
parents:
1323
diff
changeset
|
220 | cx_attr_nonnull_arg(1) |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
221 | CX_EXPORT 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
|
222 | |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
223 | /** |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
224 | * 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
|
225 | * |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
226 | * 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
|
227 | * 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
|
228 | * The destructor MUST NOT free the memory. |
|
571
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
229 | * |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
230 | * @param memory the object allocated in the pool |
|
571
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
231 | * @param fnc the destructor function |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
232 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
233 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
234 | CX_EXPORT void cxMempoolSetDestructor(void *memory, cx_destructor_func fnc); |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
235 | |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
236 | /** |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
237 | * 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
|
238 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
239 | * 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
|
240 | * 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
|
241 | * The destructor MUST NOT free the memory. |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
242 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
243 | * @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
|
244 | * @param fnc the destructor function |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
245 | * @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
|
246 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
247 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
248 | CX_EXPORT void cxMempoolSetDestructor2(void *memory, cx_destructor_func2 fnc, void *data); |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
249 | |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
250 | /** |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
251 | * 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
|
252 | * |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
253 | * 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
|
254 | * 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
|
255 | * |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
256 | * @param memory the object allocated in the pool |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
257 | */ |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
258 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
259 | CX_EXPORT void cxMempoolRemoveDestructor(void *memory); |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
260 | |
|
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
261 | /** |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
262 | * 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
|
263 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
264 | * 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
|
265 | * 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
|
266 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
267 | * @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
|
268 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
269 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
270 | CX_EXPORT void cxMempoolRemoveDestructor2(void *memory); |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
271 | |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
272 | /** |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
273 | * Registers foreign memory with this pool. |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
274 | * |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
275 | * 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
|
276 | * 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
|
277 | * are entirely independent of the pool's memory management. |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
278 | * |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
279 | * 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
|
280 | * |
|
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
281 | * @param pool the pool |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
282 | * @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
|
283 | * @param destr the destructor function |
|
1103
7c1e322b9165
refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
284 | * @retval zero success |
|
7c1e322b9165
refine docs for mempool.h - issue #548
Mike Becker <universe@uap-core.de>
parents:
993
diff
changeset
|
285 | * @retval non-zero failure |
|
727
d92a59f5d261
improve mempool implementation
Mike Becker <universe@uap-core.de>
parents:
681
diff
changeset
|
286 | */ |
|
985
68754c7de906
major refactoring of attributes
Mike Becker <universe@uap-core.de>
parents:
890
diff
changeset
|
287 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
288 | CX_EXPORT int cxMempoolRegister(CxMempool *pool, void *memory, cx_destructor_func destr); |
|
571
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
289 | |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
290 | |
|
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 | * Registers foreign memory with this pool. |
|
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 | * 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
|
295 | * 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
|
296 | * 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
|
297 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
298 | * 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
|
299 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
300 | * @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
|
301 | * 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
|
302 | * |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
303 | * @param pool the pool |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
304 | * @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
|
305 | * @param destr the destructor function |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
306 | * @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
|
307 | * @retval zero success |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
308 | * @retval non-zero failure |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
309 | */ |
|
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
310 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
311 | CX_EXPORT int cxMempoolRegister2(CxMempool *pool, void *memory, cx_destructor_func2 destr, void *data); |
|
1323
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 |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
329 | CX_EXPORT int cxMempoolTransfer(CxMempool *source, CxMempool *dest); |
|
1281
45746a08c59e
add cxMempoolTransfer() - partially resolves #640
Mike Becker <universe@uap-core.de>
parents:
1180
diff
changeset
|
330 | |
|
1283
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
331 | /** |
|
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
332 | * Transfers an object from one pool to another. |
|
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
333 | * |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
334 | * 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
|
335 | * |
|
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
336 | * @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
|
337 | * 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
|
338 | * |
|
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
339 | * @param source the pool to move the memory from |
|
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
340 | * @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
|
341 | * @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
|
342 | * @retval zero success |
|
1323
deccdb82f24e
improve mempool destructor support (1/3)
Mike Becker <universe@uap-core.de>
parents:
1283
diff
changeset
|
343 | * @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
|
344 | */ |
|
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
345 | cx_attr_nonnull |
|
1426
3a89b31f0724
clean up header files and adds support for comparing arbitrary strings with string.h functions
Mike Becker <universe@uap-core.de>
parents:
1329
diff
changeset
|
346 | CX_EXPORT int cxMempoolTransferObject(CxMempool *source, CxMempool *dest, const void *obj); |
|
1283
89935fea4b7c
add cxMempoolTransferObject() - resolves #640
Mike Becker <universe@uap-core.de>
parents:
1281
diff
changeset
|
347 | |
|
571
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
348 | #ifdef __cplusplus |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
349 | } // extern "C" |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
350 | #endif |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
351 | |
|
f83583a0bbac
#201 - add mempool implementation
Mike Becker <universe@uap-core.de>
parents:
diff
changeset
|
352 | #endif // UCX_MEMPOOL_H |