#ifndef __ABAC_STACK_H__ #define __ABAC_STACK_H__ #include "utlist.h" typedef struct _abac_stack_t abac_stack_t; typedef struct _abac_stack_element_t abac_stack_element_t; #define abac_stack_foreach(STACK, CURRENT, BODY) do { \ abac_stack_element_t *_elt; \ DL_FOREACH(STACK->elts, _elt) { \ CURRENT = (typeof(CURRENT))_elt->ptr; \ BODY \ } \ } while (0) /* exported */ extern abac_stack_t *abac_stack_new(void); extern void abac_stack_push(abac_stack_t *stack, void *elt); extern int abac_stack_unique_push(abac_stack_t *stack, void *elt); extern void *abac_stack_pop(abac_stack_t *stack); extern int abac_stack_size(abac_stack_t *stack); extern void abac_stack_free(abac_stack_t *stack); #endif /* __ABAC_STACK_H__ */