]> pd.if.org Git - liblfds/blob - liblfds/liblfds6.1.0/liblfds610/src/lfds610_freelist/lfds610_freelist_internal.h
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds6.1.0 / liblfds610 / src / lfds610_freelist / lfds610_freelist_internal.h
1 /***** the library wide include file *****/
2 #include "liblfds610_internal.h"
3
4 /***** defines *****/
5 #define LFDS610_FREELIST_POINTER 0
6 #define LFDS610_FREELIST_COUNTER 1
7 #define LFDS610_FREELIST_PAC_SIZE 2
8
9 /***** structures *****/
10 #pragma pack( push, LFDS610_ALIGN_DOUBLE_POINTER )
11
12 struct lfds610_freelist_state
13 {
14   struct lfds610_freelist_element
15     *volatile top[LFDS610_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   lfds610_atom_t
24     aba_counter,
25     element_count;
26 };
27
28 struct lfds610_freelist_element
29 {
30   struct lfds610_freelist_element
31     *next[LFDS610_FREELIST_PAC_SIZE];
32
33   void
34     *user_data;
35 };
36
37 #pragma pack( pop )
38
39 /***** private prototypes *****/
40 lfds610_atom_t lfds610_freelist_internal_new_element( struct lfds610_freelist_state *fs, struct lfds610_freelist_element **fe );
41 void lfds610_freelist_internal_validate( struct lfds610_freelist_state *fs, struct lfds610_validation_info *vi, enum lfds610_data_structure_validity *lfds610_freelist_validity );
42