]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.1/liblfds611/src/lfds611_freelist/lfds611_freelist_internal.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.1 / liblfds611 / src / lfds611_freelist / lfds611_freelist_internal.h
1 /***** the library wide include file *****/\r
2 #include "liblfds611_internal.h"\r
3 \r
4 /***** defines *****/\r
5 #define LFDS611_FREELIST_POINTER 0\r
6 #define LFDS611_FREELIST_COUNTER 1\r
7 #define LFDS611_FREELIST_PAC_SIZE 2\r
8 \r
9 /***** structures *****/\r
10 #pragma pack( push, LFDS611_ALIGN_DOUBLE_POINTER )\r
11 \r
12 struct lfds611_freelist_state\r
13 {\r
14   struct lfds611_freelist_element\r
15     *volatile top[LFDS611_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   lfds611_atom_t\r
24     aba_counter,\r
25     element_count;\r
26 };\r
27 \r
28 struct lfds611_freelist_element\r
29 {\r
30   struct lfds611_freelist_element\r
31     *next[LFDS611_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 lfds611_atom_t lfds611_freelist_internal_new_element( struct lfds611_freelist_state *fs, struct lfds611_freelist_element **fe );\r
41 void lfds611_freelist_internal_validate( struct lfds611_freelist_state *fs, struct lfds611_validation_info *vi, enum lfds611_data_structure_validity *lfds611_freelist_validity );\r
42 \r