]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.1.0/liblfds710/src/lfds710_list_addonly_singlylinked_ordered/lfds710_list_addonly_singlylinked_ordered_init.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.1.0 / liblfds710 / src / lfds710_list_addonly_singlylinked_ordered / lfds710_list_addonly_singlylinked_ordered_init.c
1 /***** includes *****/
2 #include "lfds710_list_addonly_singlylinked_ordered_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 void lfds710_list_aso_init_valid_on_current_logical_core( struct lfds710_list_aso_state *lasos,
10                                                           int (*key_compare_function)(void const *new_key, void const *existing_key),
11                                                           enum lfds710_list_aso_existing_key existing_key,
12                                                           void *user_state )
13 {
14   LFDS710_PAL_ASSERT( lasos != NULL );
15   LFDS710_PAL_ASSERT( (lfds710_pal_uint_t) &lasos->dummy_element % LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
16   LFDS710_PAL_ASSERT( (lfds710_pal_uint_t) &lasos->start % LFDS710_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
17   LFDS710_PAL_ASSERT( key_compare_function != NULL );
18   // TRD : existing_key can be any value in its range
19   // TRD : user_state can be NULL
20
21   // TRD : dummy start element - makes code easier when you can always use ->next
22   lasos->start = &lasos->dummy_element;
23
24   lasos->start->next = NULL;
25   lasos->start->value = NULL;
26   lasos->key_compare_function = key_compare_function;
27   lasos->existing_key = existing_key;
28   lasos->user_state = user_state;
29
30   lfds710_misc_internal_backoff_init( &lasos->insert_backoff );
31
32   LFDS710_MISC_BARRIER_STORE;
33
34   lfds710_misc_force_store();
35
36   return;
37 }
38