]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.1/liblfds611/src/lfds611_stack/lfds611_stack_internal.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.1 / liblfds611 / src / lfds611_stack / lfds611_stack_internal.h
1 /***** the library wide include file *****/\r
2 #include "liblfds611_internal.h"\r
3 \r
4 /***** pragmas *****/\r
5 \r
6 /***** defines *****/\r
7 #define LFDS611_STACK_POINTER 0\r
8 #define LFDS611_STACK_COUNTER 1\r
9 #define LFDS611_STACK_PAC_SIZE 2\r
10 \r
11 /***** structures *****/\r
12 #pragma pack( push, LFDS611_ALIGN_DOUBLE_POINTER )\r
13 \r
14 struct lfds611_stack_state\r
15 {\r
16   // TRD : must come first for alignment\r
17   struct lfds611_stack_element\r
18     *volatile top[LFDS611_STACK_PAC_SIZE];\r
19 \r
20   lfds611_atom_t\r
21     aba_counter;\r
22 \r
23   struct lfds611_freelist_state\r
24     *fs;\r
25 };\r
26 \r
27 struct lfds611_stack_element\r
28 {\r
29   struct lfds611_stack_element\r
30     *next[LFDS611_STACK_PAC_SIZE];\r
31 \r
32   struct lfds611_freelist_element\r
33     *fe;\r
34 \r
35   void\r
36     *user_data;\r
37 };\r
38 \r
39 #pragma pack( pop )\r
40 \r
41 /***** private prototypes *****/\r
42 int lfds611_stack_internal_freelist_init_function( void **user_data, void *user_state );\r
43 void lfds611_stack_internal_freelist_delete_function( void *user_data, void *user_state );\r
44 \r
45 void lfds611_stack_internal_new_element_from_freelist( struct lfds611_stack_state *ss, struct lfds611_stack_element *se[LFDS611_STACK_PAC_SIZE], void *user_data );\r
46 void lfds611_stack_internal_new_element( struct lfds611_stack_state *ss, struct lfds611_stack_element *se[LFDS611_STACK_PAC_SIZE], void *user_data );\r
47 void lfds611_stack_internal_init_element( struct lfds611_stack_state *ss, struct lfds611_stack_element *se[LFDS611_STACK_PAC_SIZE], struct lfds611_freelist_element *fe, void *user_data );\r
48 \r
49 void lfds611_stack_internal_push( struct lfds611_stack_state *ss, struct lfds611_stack_element *se[LFDS611_STACK_PAC_SIZE] );\r
50 \r
51 void lfds611_stack_internal_validate( struct lfds611_stack_state *ss, struct lfds611_validation_info *vi, enum lfds611_data_structure_validity *stack_validity, enum lfds611_data_structure_validity *freelist_validity );\r
52 \r