faststack.h(3)

faststack.h(3) Library Functions Manual faststack.h(3)

NAME

faststack.h - Implementation of a fast stack with smart memory management.

SYNOPSIS

Data Structures


struct stack_level
struct stack_wrapper

Macros


#define top_data(s) (s->top->data)
#define empty_stack(s) (s->top == NULL)

Typedefs


typedef struct stack_level stack_lvl_t
typedef struct stack_wrapper faststack_t

Functions


faststack_t * make_stack ()
void destroy_stack (faststack_t *s)
faststack_t * push (faststack_t *cur_stack, void *data)
stack_lvl_t * pop (faststack_t *s)

Detailed Description

Implementation of a fast stack with smart memory management.

Macro Definition Documentation

#define empty_stack(s) (s->top == NULL)

Given a stack s, check to see if the stack is empty or not. Value is boolean true or false.

#define top_data(s) (s->top->data)

Given a stack s, examine the data pointer at the top.

Typedef Documentation

typedef struct stack_wrapper faststack_t

Wrapper around the stack levels - keeps a pointer to the current top and bottom of the stack and a count of the current height. This allows the top to have non-null above pointer resulting from previously allocated stack levels that may be recycled later without malloc overhead.

typedef struct stack_level stack_lvl_t

Structure representing a single level in the stack. Has a pointer to the level above and below itself and a pointer to a generic blob of data associated with this level.

Function Documentation

void destroy_stack (faststack_t * s)

Given a stack structure, destroy it and free all of the stack levels. Important note : This function does not free the data pointed to from each level of the stack - the user is responsible for freeing this data themselves before calling this function to prevent memory leakage.

faststack_t* make_stack ()

functions Return a pointer to an empty stack structure. If the return value is NULL, one should check sexp_errno to determine why.

stack_lvl_t* pop (faststack_t * s)

Given a stack, pop a level off and return a pointer to that level. The user is responsible for extracting the data, but the stack_lvl_t structures pointed to from the level (above and below) should be left alone. If NULL is returned, either the stack contained nothing, or the incoming stack s was NULL. Consult sexp_errno to determine which was the case -- SEXP_ERR_BAD_STACK indicates a null stack was passed in.

faststack_t* push (faststack_t * cur_stack, void * data)

Given a stack, push a new level on referring to the data pointer. If a new level cannot be allocated, NULL is returned and sexp_errno is set with the appropriate error condition. Memory allocation errors will result in SEXP_ERR_MEMORY, while a null stack will result in SEXP_ERR_BAD_STACK.

Author

Generated automatically by Doxygen for Small, Fast S-Expression Library from the source code.

Thu Sep 23 2021 Small, Fast S-Expression Library