41 #define jm_stack(T) jm_mangle(jm_stack, T) 52 #define jm_stack_alloc(T) jm_mangle(jm_stack_alloc, T) 60 #define jm_stack_free(T) jm_mangle(jm_stack_free, T) 71 #define jm_stack_init(T) jm_mangle(jm_stack_init, T) 83 #define jm_stack_free_data(T) jm_mangle(jm_stack_free_data, T) 92 #define jm_stack_get_size(T) jm_mangle(jm_stack_get_size, T) 101 #define jm_stack_reserve(T) jm_mangle(jm_stack_reserve, T) 111 #define jm_stack_push(T) jm_mangle(jm_stack_push, T) 117 #define jm_stack_is_empty(T) jm_mangle(jm_stack_is_empty, T) 123 #define jm_stack_pop(T) jm_mangle(jm_stack_pop, T) 129 #define jm_stack_top(T) jm_mangle(jm_stack_top, T) 136 #define jm_stack_foreach(T) jm_mangle(jm_stack_foreach, T) 140 #define JM_STACK_MINIMAL_CAPACITY JM_VECTOR_MINIMAL_CAPACITY 143 #define JM_STACK_MAX_MEMORY_CHUNK JM_VECTOR_MAX_MEMORY_CHUNK 146 #define jm_stack_declare_template(T) \ 147 typedef jm_vector(T) jm_stack(T); \ 149 static jm_stack(T)* jm_stack_alloc(T)(size_t capacity,jm_callbacks* c) { return jm_vector_alloc(T)(0, capacity, c); } \ 151 static void jm_stack_free(T)(jm_stack(T) * a) { jm_vector_free(T)(a); } \ 153 static void jm_stack_init(T)(jm_stack(T)* a, jm_callbacks* c) { jm_vector_init(T)(a,0,c); } \ 155 static void jm_stack_free_data(T)(jm_stack(T)* a) { jm_vector_free_data(T)(a); } \ 157 static size_t jm_stack_get_size(T)(jm_stack(T)* a) { return jm_vector_get_size(T)(a); } \ 159 static size_t jm_stack_reserve(T)(jm_stack(T)* a, size_t capacity) { return jm_vector_reserve(T)(a, capacity); } \ 161 static T* jm_stack_push(T)(jm_stack(T)* a, T item) { return jm_vector_push_back(T)(a, item); }\ 163 static int jm_stack_is_empty(T)(jm_stack(T)* a) { return ((jm_stack_get_size(T)(a) > 0)? 0:1); } \ 165 static T jm_stack_top(T)(jm_stack(T)* a) { \ 166 assert(!jm_stack_is_empty(T)(a)); \ 167 return jm_vector_get_item(T)(a,jm_vector_get_size(T)(a)-1) ; \ 170 static T jm_stack_pop(T)(jm_stack(T)* a) { \ 172 ret = jm_stack_top(T)(a); \ 173 jm_vector_resize(T)(a, jm_vector_get_size(T)(a) - 1); \ 177 static void jm_stack_foreach(T)(jm_stack(T)* a, void (*f)(T, void*), void * data) { jm_vector_foreach_c(T)(a,f,data); } void * jm_voidp
A void pointer.
#define jm_stack_declare_template(T)
const char * jm_string
A constant string.