]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.0.0/liblfds600/src/lfds600_freelist/lfds600_freelist_internal.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.0.0 / liblfds600 / src / lfds600_freelist / lfds600_freelist_internal.h
1 /***** the library wide include file *****/
2 #include "lfds600_internal.h"
3
4 /***** defines *****/
5 #define LFDS600_FREELIST_POINTER 0
6 #define LFDS600_FREELIST_COUNTER 1
7 #define LFDS600_FREELIST_PAC_SIZE 2
8
9 /***** structures *****/
10 #pragma pack( push, LFDS600_ALIGN_DOUBLE_POINTER )
11
12 struct lfds600_freelist_state
13 {
14   struct lfds600_freelist_element
15     *volatile top[LFDS600_FREELIST_PAC_SIZE];
16
17   int
18     (*user_data_init_function)( void **user_data, void *user_state );
19
20   void
21     *user_state;
22
23   lfds600_atom_t
24     aba_counter,
25     element_count;
26 };
27
28 struct lfds600_freelist_element
29 {
30   struct lfds600_freelist_element
31     *next[LFDS600_FREELIST_PAC_SIZE];
32
33   void
34     *user_data;
35 };
36
37 #pragma pack( pop )
38
39 /***** private prototypes *****/
40 lfds600_atom_t lfds600_freelist_internal_new_element( struct lfds600_freelist_state *fs, struct lfds600_freelist_element **fe );
41 void lfds600_freelist_internal_validate( struct lfds600_freelist_state *fs, struct lfds600_validation_info *vi, enum data_structure_validity *lfds600_freelist_validity );
42