1 #include "lfds601_slist_internal.h"
\r
7 /****************************************************************************/
\r
8 int lfds601_slist_new( struct lfds601_slist_state **ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
\r
13 assert( ss != NULL );
\r
14 // TRD : user_data_delete_function can be NULL
\r
15 // TRD : user_state can be NULL
\r
17 *ss = (struct lfds601_slist_state *) lfds601_abstraction_aligned_malloc( sizeof(struct lfds601_slist_state), LFDS601_ALIGN_SINGLE_POINTER );
\r
21 lfds601_slist_internal_init_slist( *ss, user_data_delete_function, user_state );
\r
32 /****************************************************************************/
\r
33 void lfds601_slist_internal_init_slist( struct lfds601_slist_state *ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
\r
35 assert( ss != NULL );
\r
36 // TRD : user_data_delete_function can be NULL
\r
37 // TRD : user_state can be NULL
\r
40 ss->user_data_delete_function = user_data_delete_function;
\r
41 ss->user_state = user_state;
\r
50 /****************************************************************************/
\r
51 struct lfds601_slist_element *lfds601_slist_new_head( struct lfds601_slist_state *ss, void *user_data )
\r
53 LFDS601_ALIGN(LFDS601_ALIGN_SINGLE_POINTER) struct lfds601_slist_element
\r
56 assert( ss != NULL );
\r
57 // TRD : user_data can be NULL
\r
59 se = (struct lfds601_slist_element *) lfds601_abstraction_aligned_malloc( sizeof(struct lfds601_slist_element), LFDS601_ALIGN_DOUBLE_POINTER );
\r
63 se->user_data_and_flags[LFDS601_SLIST_USER_DATA] = user_data;
\r
64 se->user_data_and_flags[LFDS601_SLIST_FLAGS] = LFDS601_SLIST_NO_FLAGS;
\r
66 lfds601_slist_internal_link_element_to_head( ss, se );
\r
69 return( (struct lfds601_slist_element *) se );
\r
76 /****************************************************************************/
\r
77 struct lfds601_slist_element *lfds601_slist_new_next( struct lfds601_slist_element *se, void *user_data )
\r
79 LFDS601_ALIGN(LFDS601_ALIGN_SINGLE_POINTER) struct lfds601_slist_element
\r
82 assert( se != NULL );
\r
83 // TRD : user_data can be NULL
\r
85 se_next = (struct lfds601_slist_element *) lfds601_abstraction_aligned_malloc( sizeof(struct lfds601_slist_element), LFDS601_ALIGN_DOUBLE_POINTER );
\r
87 if( se_next != NULL )
\r
89 se_next->user_data_and_flags[LFDS601_SLIST_USER_DATA] = user_data;
\r
90 se_next->user_data_and_flags[LFDS601_SLIST_FLAGS] = LFDS601_SLIST_NO_FLAGS;
\r
92 lfds601_slist_internal_link_element_after_element( se, se_next );
\r
95 return( (struct lfds601_slist_element *) se_next );
\r