]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.0.1/liblfds601/src/lfds601_freelist/lfds601_freelist_internal.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.0.1 / liblfds601 / src / lfds601_freelist / lfds601_freelist_internal.h
1 /***** the library wide include file *****/\r
2 #include "lfds601_internal.h"\r
3 \r
4 /***** defines *****/\r
5 #define LFDS601_FREELIST_POINTER 0\r
6 #define LFDS601_FREELIST_COUNTER 1\r
7 #define LFDS601_FREELIST_PAC_SIZE 2\r
8 \r
9 /***** structures *****/\r
10 #pragma pack( push, LFDS601_ALIGN_DOUBLE_POINTER )\r
11 \r
12 struct lfds601_freelist_state\r
13 {\r
14   struct lfds601_freelist_element\r
15     *volatile top[LFDS601_FREELIST_PAC_SIZE];\r
16 \r
17   int\r
18     (*user_data_init_function)( void **user_data, void *user_state );\r
19 \r
20   void\r
21     *user_state;\r
22 \r
23   lfds601_atom_t\r
24     aba_counter,\r
25     element_count;\r
26 };\r
27 \r
28 struct lfds601_freelist_element\r
29 {\r
30   struct lfds601_freelist_element\r
31     *next[LFDS601_FREELIST_PAC_SIZE];\r
32 \r
33   void\r
34     *user_data;\r
35 };\r
36 \r
37 #pragma pack( pop )\r
38 \r
39 /***** private prototypes *****/\r
40 lfds601_atom_t lfds601_freelist_internal_new_element( struct lfds601_freelist_state *fs, struct lfds601_freelist_element **fe );\r
41 void lfds601_freelist_internal_validate( struct lfds601_freelist_state *fs, struct lfds601_validation_info *vi, enum lfds601_data_structure_validity *lfds601_freelist_validity );\r
42 \r