pelib  2.0.0
include/pelib/stack.h File Reference
#include <pthread.h>
#include <pelib/template.h>
#include <pelib/structure.h>
Include dependency graph for stack.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Defines

#define stackelem(elem)   PELIB_CONCAT_2(stackelem_, elem)
#define stackelem_t(elem)   PELIB_CONCAT_2(stackelem(elem), _t)
#define pelib_stackelem_write(elem)   PELIB_CONCAT_3(pelib_, stackelem(elem), _write)
#define pelib_stackelem_read(elem)   PELIB_CONCAT_3(pelib_, stackelem(elem), _read)
#define pelib_stackelem_check(elem)   PELIB_CONCAT_3(pelib_, stackelem(elem), _check)
#define stack(elem)   PELIB_CONCAT_2(stack_, elem)
#define stack_t(elem)   PELIB_CONCAT_2(stack(elem), _t)
#define pelib_stack_check(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _check)
#define pelib_stack_isempty(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _isempty)
#define pelib_stack_push(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _push)
#define pelib_stack_pop(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _pop)
#define pelib_stack_peek(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _peek)
#define pelib_stack_push_safe(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _push_safe)
#define pelib_stack_pop_safe(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _pop_safe)
#define pelib_stack_push_elem(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _push_elem)
#define pelib_stack_pop_elem(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _pop_elem)
#define pelib_stack_push_elem_safe(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _push_elem_safe)
#define pelib_stack_pop_elem_safe(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _pop_elem_safe)
#define pelib_stack_push_safe_managed(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _push_safe_managed)
#define pelib_stack_pop_safe_managed(elem)   PELIB_CONCAT_3(pelib_, stack(elem), _pop_safe_managed)
#define STRUCT_T   stackelem_t(STACK_T)
#define STRUCT_T   stack_t(STACK_T)

Functions

struct stackelem (STACK_T)
int pelib_stackelem_write() STACK_T (stackelem_t(STACK_T)*, STACK_T)
int pelib_stackelem_read() STACK_T (stackelem_t(STACK_T)*, STACK_T *)
int pelib_stackelem_check() STACK_T (stackelem_t(STACK_T)*)
struct stack (STACK_T)
int pelib_stack_check() STACK_T (stack_t(STACK_T)*)
int pelib_stack_push() STACK_T (stack_t(STACK_T)*stack, STACK_T data)
int pelib_stack_pop() STACK_T (stack_t(STACK_T)*, STACK_T *)
int pelib_stack_push_elem() STACK_T (stack_t(STACK_T)*, stackelem_t(STACK_T)*)
int pelib_stack_pop_elem() STACK_T (stack_t(STACK_T)*, stackelem_t(STACK_T)**)
int pelib_stack_push_safe_managed() STACK_T (stack_t(STACK_T)*stack, stack_t(STACK_T)*bin, STACK_T value)
int pelib_stack_pop_safe_managed() STACK_T (stack_t(STACK_T)*stack, stack_t(STACK_T)*bin, STACK_T *ptr)

Define Documentation

#define pelib_stack_check (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _check)

Definition at line 44 of file stack.h.

#define pelib_stack_isempty (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _isempty)

Definition at line 45 of file stack.h.

#define pelib_stack_peek (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _peek)

Definition at line 48 of file stack.h.

#define pelib_stack_pop (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _pop)

Definition at line 47 of file stack.h.

#define pelib_stack_pop_elem (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _pop_elem)

Definition at line 52 of file stack.h.

#define pelib_stack_pop_elem_safe (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _pop_elem_safe)

Definition at line 54 of file stack.h.

#define pelib_stack_pop_safe (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _pop_safe)

Definition at line 50 of file stack.h.

#define pelib_stack_pop_safe_managed (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _pop_safe_managed)

Definition at line 56 of file stack.h.

#define pelib_stack_push (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _push)

Definition at line 46 of file stack.h.

#define pelib_stack_push_elem (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _push_elem)

Definition at line 51 of file stack.h.

#define pelib_stack_push_elem_safe (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _push_elem_safe)

Definition at line 53 of file stack.h.

#define pelib_stack_push_safe (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _push_safe)

Definition at line 49 of file stack.h.

#define pelib_stack_push_safe_managed (   elem)    PELIB_CONCAT_3(pelib_, stack(elem), _push_safe_managed)

Definition at line 55 of file stack.h.

#define pelib_stackelem_check (   elem)    PELIB_CONCAT_3(pelib_, stackelem(elem), _check)

Definition at line 39 of file stack.h.

#define pelib_stackelem_read (   elem)    PELIB_CONCAT_3(pelib_, stackelem(elem), _read)

Definition at line 38 of file stack.h.

#define pelib_stackelem_write (   elem)    PELIB_CONCAT_3(pelib_, stackelem(elem), _write)

Definition at line 37 of file stack.h.

#define stack (   elem)    PELIB_CONCAT_2(stack_, elem)

Definition at line 41 of file stack.h.

#define stack_t (   elem)    PELIB_CONCAT_2(stack(elem), _t)

Definition at line 42 of file stack.h.

#define stackelem (   elem)    PELIB_CONCAT_2(stackelem_, elem)

Definition at line 34 of file stack.h.

#define stackelem_t (   elem)    PELIB_CONCAT_2(stackelem(elem), _t)

Definition at line 35 of file stack.h.

#define STRUCT_T   stackelem_t(STACK_T)

Definition at line 92 of file stack.h.

#define STRUCT_T   stack_t(STACK_T)

Definition at line 92 of file stack.h.


Function Documentation

struct stack ( STACK_T  ) [read]

Generic chained stack

Space-less type alias for struct stack

Definition at line 84 of file stack.h.

Writes data into an existing stack element

Definition at line 41 of file stack.c.

Reads data from a stack element

Definition at line 49 of file stack.c.

Checks if a stack element is valid

Definition at line 58 of file stack.c.

Returns 0 if the stack is not in a consistent state

Returns 0 is the stack holds at least one element

Definition at line 105 of file stack.c.

int pelib_stack_push() STACK_T ( stack_t(STACK_T)*  stack,
STACK_T  data 
)

Allocates a new stack element, write the element in it and push it to the stack

Pushes an element to the stack in a thread-safe manner

Definition at line 119 of file stack.c.

Read value from the head stack element, removes the head stack element and free the stack element

Read the head value from the stack but doesn't remove the head element

Pops an element to the stack in a thread-safe manner

Definition at line 137 of file stack.c.

Pushes an existing stack element to the stack

Push a stack element in a thread-safe manner

Definition at line 186 of file stack.c.

Pops the head element of the stack without reading its value or freeing it

Pops a stack element in thread-safe manner

Definition at line 199 of file stack.c.

Pushes a new value in the stack, reusing a stack element from a stack element recycling bin. Allocates a new element if the recycle bin is empty

Parameters:
stackStack that receives the new element
binRecycle bin (stack) that contains stack element to be reused
valueValue to be pushed in the stack
Returns:
0 If the push operation could not be performed

Definition at line 240 of file stack.c.

Pops the head value of a stack, saves the stack element popped in a recycling bin and writes the value read in ptr

Parameters:
stackStack toread head element from
binStack element recycle bin
ptrMemory address where the value popped is written

Definition at line 260 of file stack.c.

struct stackelem ( STACK_T  ) [read]

Generic element of a stack that holds data pushed and pointer to the next element

Space-less type alias for struct stackelem

Definition at line 60 of file stack.h.