]> pd.if.org Git - liblfds/blob - liblfds/liblfds7.0.0/liblfds700/src/lfds700_list_addonly_ordered_singlylinked/lfds700_list_addonly_ordered_singlylinked_init.c
Initial import (all versions, including the new 7.1.0)
[liblfds] / liblfds / liblfds7.0.0 / liblfds700 / src / lfds700_list_addonly_ordered_singlylinked / lfds700_list_addonly_ordered_singlylinked_init.c
1 /***** includes *****/
2 #include "lfds700_list_addonly_ordered_singlylinked_internal.h"
3
4
5
6
7
8 /****************************************************************************/
9 void lfds700_list_aos_init_valid_on_current_logical_core( struct lfds700_list_aos_state *laoss,
10                             int (*key_compare_function)(void const *new_key, void const *existing_key),
11                             enum lfds700_list_aos_existing_key existing_key,
12                             void *user_state )
13 {
14   LFDS700_PAL_ASSERT( laoss != NULL );
15   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) &laoss->start % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
16   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) &laoss->dummy_element % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
17   LFDS700_PAL_ASSERT( (lfds700_pal_uint_t) &laoss->key_compare_function % LFDS700_PAL_ATOMIC_ISOLATION_IN_BYTES == 0 );
18   LFDS700_PAL_ASSERT( key_compare_function != NULL );
19   // TRD : existing_key can be any value in its range
20   // TRD : user_state can be NULL
21
22   // TRD : dummy start element - makes code easier when you can always use ->next
23   laoss->start = &laoss->dummy_element;
24
25   laoss->start->next = NULL;
26   laoss->start->value = NULL;
27   laoss->key_compare_function = key_compare_function;
28   laoss->existing_key = existing_key;
29   laoss->user_state = user_state;
30
31   LFDS700_MISC_BARRIER_STORE;
32
33   lfds700_misc_force_store();
34
35   return;
36 }
37