1 #include "lfds610_slist_internal.h"
7 /****************************************************************************/
8 int lfds610_slist_new( struct lfds610_slist_state **ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
14 // TRD : user_data_delete_function can be NULL
15 // TRD : user_state can be NULL
17 *ss = (struct lfds610_slist_state *) lfds610_liblfds_aligned_malloc( sizeof(struct lfds610_slist_state), LFDS610_ALIGN_SINGLE_POINTER );
21 lfds610_slist_internal_init_slist( *ss, user_data_delete_function, user_state );
25 LFDS610_BARRIER_STORE;
34 /****************************************************************************/
35 #pragma warning( disable : 4100 )
37 void lfds610_slist_use( struct lfds610_slist_state *ss )
46 #pragma warning( default : 4100 )
52 /****************************************************************************/
53 void lfds610_slist_internal_init_slist( struct lfds610_slist_state *ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
56 // TRD : user_data_delete_function can be NULL
57 // TRD : user_state can be NULL
60 ss->user_data_delete_function = user_data_delete_function;
61 ss->user_state = user_state;
70 /****************************************************************************/
71 struct lfds610_slist_element *lfds610_slist_new_head( struct lfds610_slist_state *ss, void *user_data )
73 LFDS610_ALIGN(LFDS610_ALIGN_SINGLE_POINTER) struct lfds610_slist_element
77 // TRD : user_data can be NULL
79 se = (struct lfds610_slist_element *) lfds610_liblfds_aligned_malloc( sizeof(struct lfds610_slist_element), LFDS610_ALIGN_DOUBLE_POINTER );
83 se->user_data_and_flags[LFDS610_SLIST_USER_DATA] = user_data;
84 se->user_data_and_flags[LFDS610_SLIST_FLAGS] = LFDS610_SLIST_NO_FLAGS;
86 lfds610_slist_internal_link_element_to_head( ss, se );
89 return( (struct lfds610_slist_element *) se );
96 /****************************************************************************/
97 struct lfds610_slist_element *lfds610_slist_new_next( struct lfds610_slist_element *se, void *user_data )
99 LFDS610_ALIGN(LFDS610_ALIGN_SINGLE_POINTER) struct lfds610_slist_element
102 assert( se != NULL );
103 // TRD : user_data can be NULL
105 se_next = (struct lfds610_slist_element *) lfds610_liblfds_aligned_malloc( sizeof(struct lfds610_slist_element), LFDS610_ALIGN_DOUBLE_POINTER );
107 if( se_next != NULL )
109 se_next->user_data_and_flags[LFDS610_SLIST_USER_DATA] = user_data;
110 se_next->user_data_and_flags[LFDS610_SLIST_FLAGS] = LFDS610_SLIST_NO_FLAGS;
112 lfds610_slist_internal_link_element_after_element( se, se_next );
115 return( (struct lfds610_slist_element *) se_next );