Helixis 1.0
Task Programming API
sources/liblfds/slist/slist_new.c
Go to the documentation of this file.
00001 #include "slist_internal.h"
00002 #if defined(HLX_BUILD_WITH_PARALLEL_THREADING)
00003 
00004 extern hlx_api gl_api;
00005 
00006 int slist_new( struct slist_state **ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
00007 {
00008   int
00009     rv = 0;
00010 
00011   /* TRD : user_data_delete_function can be 0 */
00012   /* TRD : user_state can be 0 */
00013 
00014   *ss = (struct slist_state *) gl_api.aligned_malloc_entry( sizeof(struct slist_state), ALIGN_SINGLE_POINTER );
00015 
00016   if( *ss != 0 )
00017   {
00018     slist_internal_init_slist( *ss, user_data_delete_function, user_state );
00019     rv = 1;
00020   }
00021 
00022   return( rv );
00023 }
00024 
00025 void slist_internal_init_slist( struct slist_state *ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state )
00026 {
00027   /* TRD : user_data_delete_function can be 0 */
00028   /* TRD : user_state can be 0 */
00029 
00030   ss->head = 0;
00031   ss->user_data_delete_function = user_data_delete_function;
00032   ss->user_state = user_state;
00033 
00034   return;
00035 }
00036 
00037 struct slist_element *slist_new_head( struct slist_state *ss, void *user_data )
00038 {
00039   ALIGN(ALIGN_SINGLE_POINTER) struct slist_element
00040     *volatile se;
00041 
00042   /* TRD : user_data can be 0 */
00043 
00044   se = (struct slist_element *) gl_api.aligned_malloc_entry( sizeof(struct slist_element), ALIGN_DOUBLE_POINTER );
00045 
00046   if( se != 0 )
00047   {
00048     se->user_data_and_flags[SLIST_USER_DATA] = user_data;
00049     se->user_data_and_flags[SLIST_FLAGS] = SLIST_NO_FLAGS;
00050 
00051     slist_internal_link_element_to_head( ss, se );
00052   }
00053 
00054   return( (struct slist_element *) se );
00055 }
00056 
00057 #endif /* !HLX_BUILD_WITH_PARALLEL_THREADING */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines