1 /***** the library wide include file *****/
2 #include "liblfds610_internal.h"
7 #define LFDS610_STACK_POINTER 0
8 #define LFDS610_STACK_COUNTER 1
9 #define LFDS610_STACK_PAC_SIZE 2
11 /***** structures *****/
12 #pragma pack( push, LFDS610_ALIGN_DOUBLE_POINTER )
14 struct lfds610_stack_state
16 // TRD : must come first for alignment
17 struct lfds610_stack_element
18 *volatile top[LFDS610_STACK_PAC_SIZE];
23 struct lfds610_freelist_state
27 struct lfds610_stack_element
29 struct lfds610_stack_element
30 *next[LFDS610_STACK_PAC_SIZE];
32 struct lfds610_freelist_element
41 /***** private prototypes *****/
42 int lfds610_stack_internal_freelist_init_function( void **user_data, void *user_state );
43 void lfds610_stack_internal_freelist_delete_function( void *user_data, void *user_state );
45 void lfds610_stack_internal_new_element_from_freelist( struct lfds610_stack_state *ss, struct lfds610_stack_element *se[LFDS610_STACK_PAC_SIZE], void *user_data );
46 void lfds610_stack_internal_new_element( struct lfds610_stack_state *ss, struct lfds610_stack_element *se[LFDS610_STACK_PAC_SIZE], void *user_data );
47 void lfds610_stack_internal_init_element( struct lfds610_stack_state *ss, struct lfds610_stack_element *se[LFDS610_STACK_PAC_SIZE], struct lfds610_freelist_element *fe, void *user_data );
49 void lfds610_stack_internal_push( struct lfds610_stack_state *ss, struct lfds610_stack_element *se[LFDS610_STACK_PAC_SIZE] );
51 void lfds610_stack_internal_validate( struct lfds610_stack_state *ss, struct lfds610_validation_info *vi, enum lfds610_data_structure_validity *stack_validity, enum lfds610_data_structure_validity *freelist_validity );