9 #ifndef __AFW_STACK_H__
10 #define __AFW_STACK_H__
40 #define afw_stack_create(typedef_name, \
41 initial_count, maximum_count, create_subpool_pool, p, xctx) \
42 (typedef_name *)afw_stack_create_impl( \
43 sizeof(*(((typedef_name *)0))->first), \
44 initial_count, maximum_count, create_subpool_pool, p, xctx);
75 #define afw_stack_release(instance, xctx) \
76 afw_stack_release_impl( &((instance)->pub), xctx)
100 #define afw_stack_copy(instance, count, ptr, p, xctx) \
101 afw_stack_copy_impl( &((instance)->pub), count, ptr, p, xctx)
131 #define afw_stack_copy_and_release(instance, count, ptr, p, xctx) \
132 afw_stack_copy(instance, (count), (const void ***)(ptr), (p), (xctx)); \
133 afw_stack_release(instance, (xctx))
157 #define afw_stack_is_empty(instance) \
158 ((instance)->top < (instance)->first)
168 #define afw_stack_pop(instance, xctx) \
169 if ((instance)->top < ((instance)->first)) { \
170 AFW_THROW_ERROR_Z(general, "stack underflow", xctx); \
181 #define afw_stack_count(instance, xctx) \
182 ((instance)->top + 1 - (instance)->first))
195 #define afw_stack_push(instance, xctx) \
196 ((instance)->top)++; \
197 if ((instance)->top >= ((instance)->end)) { \
198 afw_stack_extend_impl(&((instance)->pub), xctx); \
213 #define afw_stack_push_direct(instance, xctx) \
214 ((instance)->top)++; \
215 if ((instance)->top >= ((instance)->end)) { \
216 afw_stack_extend_impl(&((instance)->pub), xctx); \
230 #define afw_stack_push_and_get_entry(instance, entry, xctx) \
231 afw_stack_push_direct(instance, xctx); \
232 entry = (instance)->top
243 #define afw_stack_set_empty(instance) \
244 (instance)->top = ((instance)->first) - 1
263 afw_stack_internal_set_evaluation_stack(
#define AFW_DEFINE_INTERNAL(type)
Define an internal function for /src/afw/ source*.c files.
#define AFW_BEGIN_DECLARES
#define AFW_DECLARE(type)
Declare a public afw function.
Interfaceafw_interface header.
apr_size_t afw_size_t
size_t.
afw_stack_internal_set_qualifier_stack(afw_xctx_t *xctx)
void afw_stack_copy_impl(afw_stack_t *instance, afw_size_t *count, const void ***ptr, const afw_pool_t *p, afw_xctx_t *xctx)
Copy stack implementation.
afw_stack_t * afw_stack_create_impl(afw_size_t entry_size, afw_size_t initial_count, afw_size_t maximum_count, afw_boolean_t create_subpool_pool, const afw_pool_t *p, afw_xctx_t *xctx)
Create a stack implementation.
void afw_stack_release_impl(afw_stack_t *instance, afw_xctx_t *xctx)
Release stack implementation.
void afw_stack_extend_impl(afw_stack_t *instance, afw_xctx_t *xctx)
Extend stack implementation.
Interface afw_pool public struct.
Struct for afw_stack_t typedef.
Interface afw_xctx public struct.