1 #include "lfds600_slist_internal.h"
7 /****************************************************************************/
8 int lfds600_slist_new( struct lfds600_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 lfds600_slist_state *) lfds600_abstraction_aligned_malloc( sizeof(struct lfds600_slist_state), LFDS600_ALIGN_SINGLE_POINTER );
21 lfds600_slist_internal_init_slist( *ss, user_data_delete_function, user_state );
32 /****************************************************************************/
33 void lfds600_slist_internal_init_slist( struct lfds600_slist_state *ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
36 // TRD : user_data_delete_function can be NULL
37 // TRD : user_state can be NULL
40 ss->user_data_delete_function = user_data_delete_function;
41 ss->user_state = user_state;
50 /****************************************************************************/
51 struct lfds600_slist_element *lfds600_slist_new_head( struct lfds600_slist_state *ss, void *user_data )
53 LFDS600_ALIGN(LFDS600_ALIGN_SINGLE_POINTER) struct lfds600_slist_element
57 // TRD : user_data can be NULL
59 se = (struct lfds600_slist_element *) lfds600_abstraction_aligned_malloc( sizeof(struct lfds600_slist_element), LFDS600_ALIGN_DOUBLE_POINTER );
63 se->user_data_and_flags[LFDS600_SLIST_USER_DATA] = user_data;
64 se->user_data_and_flags[LFDS600_SLIST_FLAGS] = LFDS600_SLIST_NO_FLAGS;
66 lfds600_slist_internal_link_element_to_head( ss, se );
69 return( (struct lfds600_slist_element *) se );
76 /****************************************************************************/
77 struct lfds600_slist_element *lfds600_slist_new_next( struct lfds600_slist_element *se, void *user_data )
79 LFDS600_ALIGN(LFDS600_ALIGN_SINGLE_POINTER) struct lfds600_slist_element
83 // TRD : user_data can be NULL
85 se_next = (struct lfds600_slist_element *) lfds600_abstraction_aligned_malloc( sizeof(struct lfds600_slist_element), LFDS600_ALIGN_DOUBLE_POINTER );
89 se_next->user_data_and_flags[LFDS600_SLIST_USER_DATA] = user_data;
90 se_next->user_data_and_flags[LFDS600_SLIST_FLAGS] = LFDS600_SLIST_NO_FLAGS;
92 lfds600_slist_internal_link_element_after_element( se, se_next );
95 return( (struct lfds600_slist_element *) se_next );