Thu, 19 Dec 2019 19:58:41 +0100
adds set operations for UcxMap
103
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
1 | /* |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
2 | * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
3 | * |
259 | 4 | * Copyright 2017 Mike Becker, Olaf Wintermann All rights reserved. |
103
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
5 | * |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
6 | * Redistribution and use in source and binary forms, with or without |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
7 | * modification, are permitted provided that the following conditions are met: |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
8 | * |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
9 | * 1. Redistributions of source code must retain the above copyright |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
10 | * notice, this list of conditions and the following disclaimer. |
13 | 11 | * |
103
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
12 | * 2. Redistributions in binary form must reproduce the above copyright |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
13 | * notice, this list of conditions and the following disclaimer in the |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
14 | * documentation and/or other materials provided with the distribution. |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
15 | * |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
16 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
17 | * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
18 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
19 | * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
20 | * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
21 | * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
22 | * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
23 | * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
24 | * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
25 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
08018864fb91
added license and copyright notice to all files
Mike Becker <universe@uap-core.de>
parents:
69
diff
changeset
|
26 | * POSSIBILITY OF SUCH DAMAGE. |
13 | 27 | */ |
28 | ||
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
29 | /** |
182 | 30 | * @file stack.h |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
31 | * |
182 | 32 | * Default stack memory allocation implementation. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
33 | * |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
34 | * @author Mike Becker |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
35 | * @author Olaf Wintermann |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
36 | */ |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
37 | |
182 | 38 | #ifndef UCX_STACK_H |
39 | #define UCX_STACK_H | |
13 | 40 | |
259 | 41 | #include "ucx.h" |
42 | #include "allocator.h" | |
38
35f67a8ef875
added missing stddef includes
Mike Becker <universe@uap-core.de>
parents:
16
diff
changeset
|
43 | |
13 | 44 | #ifdef __cplusplus |
45 | extern "C" { | |
46 | #endif | |
47 | ||
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
48 | |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
49 | /** |
182 | 50 | * UCX stack structure. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
51 | */ |
182 | 52 | typedef struct { |
53 | /** UcxAllocator based on this stack */ | |
54 | UcxAllocator allocator; | |
55 | ||
56 | /** Stack size. */ | |
57 | size_t size; | |
58 | ||
59 | /** Pointer to the bottom of the stack */ | |
60 | char *space; | |
61 | ||
62 | /** Pointer to the top of the stack */ | |
63 | char *top; | |
64 | } UcxStack; | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
65 | |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
66 | /** |
185
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
67 | * Metadata for each UCX stack element. |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
68 | */ |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
69 | struct ucx_stack_metadata { |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
70 | /** |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
71 | * Location of the previous element (<code>NULL</code> if this is the first) |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
72 | */ |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
73 | char *prev; |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
74 | |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
75 | /** Size of this element */ |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
76 | size_t size; |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
77 | }; |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
78 | |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
79 | /** |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
80 | * Initializes UcxStack structure with memory. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
81 | * |
185
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
82 | * @param stack a pointer to an uninitialized stack structure |
182 | 83 | * @param space the memory area that shall be managed |
84 | * @param size size of the memory area | |
85 | * @return a new UcxStack structure | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
86 | */ |
185
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
87 | void ucx_stack_init(UcxStack *stack, char* space, size_t size); |
13 | 88 | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
89 | /** |
182 | 90 | * Allocates stack memory. |
141
c466e2a6cbd0
added mempool clamp + some minor fixes
Mike Becker <universe@uap-core.de>
parents:
135
diff
changeset
|
91 | * |
182 | 92 | * @param stack a pointer to the stack |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
93 | * @param n amount of memory to allocate |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
94 | * @return a pointer to the allocated memory or <code>NULL</code> on stack |
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
95 | * overflow |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
96 | * @see ucx_allocator_malloc() |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
97 | */ |
182 | 98 | void *ucx_stack_malloc(UcxStack *stack, size_t n); |
99 | ||
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
100 | /** |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
101 | * Allocates memory with #ucx_stack_malloc() and copies the specified data if |
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
102 | * the allocation was successful. |
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
103 | * |
182 | 104 | * @param stack a pointer to the stack |
105 | * @param n amount of memory to allocate | |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
106 | * @param data a pointer to the data to copy |
182 | 107 | * @return a pointer to the allocated memory |
108 | * @see ucx_stack_malloc | |
109 | */ | |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
110 | void *ucx_stack_push(UcxStack *stack, size_t n, const void *data); |
182 | 111 | |
112 | /** | |
113 | * Allocates an array of stack memory | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
114 | * |
182 | 115 | * The content of the allocated memory is set to zero. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
116 | * |
182 | 117 | * @param stack a pointer to the stack |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
118 | * @param nelem amount of elements to allocate |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
119 | * @param elsize amount of memory per element |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
120 | * @return a pointer to the allocated memory |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
121 | * @see ucx_allocator_calloc() |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
122 | */ |
182 | 123 | void *ucx_stack_calloc(UcxStack *stack, size_t nelem, size_t elsize); |
146
aa376dba1ba8
fixed documentation for netbeans parser + added sstrprefix() and sstrsuffix()
Mike Becker <universe@uap-core.de>
parents:
141
diff
changeset
|
124 | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
125 | /** |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
126 | * Allocates memory with #ucx_stack_calloc() and copies the specified data if |
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
127 | * the allocation was successful. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
128 | * |
182 | 129 | * @param stack a pointer to the stack |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
130 | * @param nelem amount of elements to allocate |
182 | 131 | * @param elsize amount of memory per element |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
132 | * @param data a pointer to the data |
182 | 133 | * @return a pointer to the allocated memory |
134 | * @see ucx_stack_calloc | |
135 | */ | |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
136 | void *ucx_stack_pusharr(UcxStack *stack, |
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
137 | size_t nelem, size_t elsize, const void *data); |
182 | 138 | |
139 | /** | |
140 | * Reallocates memory on the stack. | |
141
c466e2a6cbd0
added mempool clamp + some minor fixes
Mike Becker <universe@uap-core.de>
parents:
135
diff
changeset
|
141 | * |
182 | 142 | * Shrinking memory is always safe. Extending memory can be very expensive. |
143 | * | |
144 | * @param stack the stack | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
145 | * @param ptr a pointer to the memory that shall be reallocated |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
146 | * @param n the new size of the memory |
182 | 147 | * @return a pointer to the new location of the memory |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
148 | * @see ucx_allocator_realloc() |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
149 | */ |
182 | 150 | void *ucx_stack_realloc(UcxStack *stack, void *ptr, size_t n); |
146
aa376dba1ba8
fixed documentation for netbeans parser + added sstrprefix() and sstrsuffix()
Mike Becker <universe@uap-core.de>
parents:
141
diff
changeset
|
151 | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
152 | /** |
182 | 153 | * Frees memory on the stack. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
154 | * |
182 | 155 | * Freeing stack memory behaves in a special way. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
156 | * |
182 | 157 | * If the element, that should be freed, is the top most element of the stack, |
158 | * it is removed from the stack. Otherwise it is marked as freed. Marked | |
159 | * elements are removed, when they become the top most elements of the stack. | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
160 | * |
182 | 161 | * @param stack a pointer to the stack |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
162 | * @param ptr a pointer to the memory that shall be freed |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
163 | */ |
182 | 164 | void ucx_stack_free(UcxStack *stack, void *ptr); |
165 | ||
13 | 166 | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
167 | /** |
182 | 168 | * Returns the size of the top most element. |
169 | * @param stack a pointer to the stack | |
170 | * @return the size of the top most element | |
171 | */ | |
185
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
172 | #define ucx_stack_topsize(stack) ((stack)->top ? ((struct ucx_stack_metadata*)\ |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
173 | (stack)->top - 1)->size : 0) |
182 | 174 | |
175 | /** | |
176 | * Removes the top most element from the stack and copies the content to <code> | |
177 | * dest</code>, if specified. | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
178 | * |
182 | 179 | * Use #ucx_stack_topsize()# to get the amount of memory that must be available |
180 | * at the location of <code>dest</code>. | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
181 | * |
182 | 182 | * @param stack a pointer to the stack |
183 | * @param dest the location where the contents shall be written to, or <code> | |
184 | * NULL</code>, if the element shall only be removed. | |
185 | * @see ucx_stack_free | |
186 | * @see ucx_stack_popn | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
187 | */ |
217
e056e4e0b08e
removed dependency to stdint.h in stack header
Mike Becker <universe@uap-core.de>
parents:
192
diff
changeset
|
188 | #define ucx_stack_pop(stack, dest) ucx_stack_popn(stack, dest, (size_t)-1) |
13 | 189 | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
190 | /** |
182 | 191 | * Removes the top most element from the stack and copies the content to <code> |
192 | * dest</code>. | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
193 | * |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
194 | * This function copies at most <code>n</code> bytes to the destination, but |
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
195 | * the element is always freed as a whole. |
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
196 | * If the element was larger than <code>n</code>, the remaining data is lost. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
197 | * |
182 | 198 | * @param stack a pointer to the stack |
199 | * @param dest the location where the contents shall be written to | |
301
0f83916c1639
documentation for the UcxStack
Mike Becker <universe@uap-core.de>
parents:
259
diff
changeset
|
200 | * @param n copies at most n bytes to <code>dest</code> |
182 | 201 | * @see ucx_stack_pop |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
202 | */ |
182 | 203 | void ucx_stack_popn(UcxStack *stack, void *dest, size_t n); |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
204 | |
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
205 | /** |
182 | 206 | * Returns the remaining available memory on the specified stack. |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
207 | * |
182 | 208 | * @param stack a pointer to the stack |
209 | * @return the remaining available memory | |
135
a0aa1c15f46b
documented mempool + some fixes
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
210 | */ |
185
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
211 | size_t ucx_stack_avail(UcxStack *stack); |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
212 | |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
213 | /** |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
214 | * Checks, if the stack is empty. |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
215 | * |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
216 | * @param stack a pointer to the stack |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
217 | * @return nonzero, if the stack is empty, zero otherwise |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
218 | */ |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
219 | #define ucx_stack_empty(stack) (!(stack)->top) |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
220 | |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
221 | /** |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
222 | * Computes a recommended size for the stack memory area. Note, that |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
223 | * reallocations have not been taken into account, so you might need to reserve |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
224 | * twice as much memory to allow many reallocations. |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
225 | * |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
226 | * @param size the approximate payload |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
227 | * @param elems the approximate count of element allocations |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
228 | * @return a recommended size for the stack space based on the information |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
229 | * provided |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
230 | */ |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
231 | #define ucx_stack_dim(size, elems) (size+sizeof(struct ucx_stack_metadata) * \ |
a48428642b4e
added stack implementation + added g++ config and added some fixes for C++
Mike Becker <universe@uap-core.de>
parents:
182
diff
changeset
|
232 | (elems + 1)) |
182 | 233 | |
13 | 234 | |
235 | #ifdef __cplusplus | |
236 | } | |
237 | #endif | |
238 | ||
182 | 239 | #endif /* UCX_STACK_H */ |
13 | 240 |