A generic stack is a first-in-last-out structure defined here based on three primary operations: push, top, and pop. Pushing an element onto a stack adds it to the head of the list. The top operation fetches the most recently pushed element still on the stack, and popping removes it.
◆ GSTACK_DECL
| #define GSTACK_DECL |
( |
| PREFIX, |
|
|
| TYPE ) |
Value:extern int PREFIX##_push(
struct gstack* s, TYPE
const* data); \
extern TYPE* PREFIX##_top(
struct gstack* s); \
extern void PREFIX##_pop(
struct gstack* s);
Declare specialized gstack functions.
◆ GSTACK_DEFN
| #define GSTACK_DEFN |
( |
| PREFIX, |
|
|
| TYPE, |
|
|
| COPY, |
|
|
| FREE ) |
Value:
GSTACK_TOP_DEFN(PREFIX,TYPE) \
GSTACK_POP_DEFN(PREFIX,FREE)
#define GSTACK_PUSH_DEFN(PREFIX, TYPE, COPY)
Definition gstack.h:49
Define all the specialized gstack functions. If COPY is NULL, a simple memcpy is used instead. If FREE is NULL, no attempt is made to free the data.
◆ GSTACK_POP_DEFN
| #define GSTACK_POP_DEFN |
( |
| PREFIX, |
|
|
| FREE ) |
Value:void PREFIX##_pop(
struct gstack* s) { \
}
void adt_free_fn(void *)
Definition adt_common.h:12
Define a specialized gstack pop function.
◆ GSTACK_PUSH_DEFN
| #define GSTACK_PUSH_DEFN |
( |
| PREFIX, |
|
|
| TYPE, |
|
|
| COPY ) |
Value:int PREFIX##_push(
struct gstack* s, TYPE
const* data) { \
}
int gstack_push(struct gstack *s, unsigned datasize, const void *data, adt_copy_fn *fn)
Definition gstack_push.c:8
int adt_copy_fn(void *, const void *)
Definition adt_common.h:16
Define a specialized gstack push function.
◆ GSTACK_TOP_DEFN
| #define GSTACK_TOP_DEFN |
( |
| PREFIX, |
|
|
| TYPE ) |
Value:TYPE* PREFIX##_top(
struct gstack* s) { \
return (s->head == 0) ? 0 : (TYPE*)s->head->data; \
}
Define a specialized gstack top function.
◆ gstack_pop()
Remove the first (most recently pushed) element from the queue. If the free function fn is NULL no data freeing is done. Note that this does not return a pointer to the popped item, as once the item has been popped it is also freed.
References gstack_node::data, and gstack_node::next.
◆ gstack_push()
| int gstack_push |
( |
struct gstack * | s, |
|
|
unsigned | datasize, |
|
|
const void * | data, |
|
|
adt_copy_fn * | fn ) |
◆ gstack_top()
| void * gstack_top |
( |
const struct gstack * | s | ) |
|
Return the address of first (most recently pushed) element in the queue.