Helixis 1.0
Task Programming API
sources/liblfds/slist/slist_get_and_set.c
Go to the documentation of this file.
00001 #include "slist_internal.h"
00002 #if defined(HLX_BUILD_WITH_PARALLEL_THREADING)
00003 
00004 int slist_get_user_data_from_element( struct slist_element *se, void **user_data )
00005 {
00006   int
00007     rv = 1;
00008 
00009   *user_data = (void *) se->user_data_and_flags[SLIST_USER_DATA];
00010 
00011   if( (atom_t) se->user_data_and_flags[SLIST_FLAGS] & SLIST_FLAG_DELETED )
00012     rv = 0;
00013 
00014   return( rv );
00015 }
00016 
00017 struct slist_element *slist_get_head( struct slist_state *ss, struct slist_element **se )
00018 {
00019   *se = (struct slist_element *) ss->head;
00020 
00021   slist_internal_move_to_first_undeleted_element( se );
00022 
00023   return( *se );
00024 }
00025 
00026 struct slist_element *slist_get_next( struct slist_element *se, struct slist_element **next_se )
00027 {
00028   *next_se = (struct slist_element *) se->next;
00029 
00030   slist_internal_move_to_first_undeleted_element( next_se );
00031 
00032   return( *next_se );
00033 }
00034 
00035 struct slist_element *slist_get_head_and_then_next( struct slist_state *ss, struct slist_element **se )
00036 {
00037   if( *se == 0 )
00038     slist_get_head( ss, se );
00039   else
00040     slist_get_next( *se, se );
00041 
00042   return( *se );
00043 }
00044 
00045 void slist_internal_move_to_first_undeleted_element( struct slist_element **se )
00046 {
00047   while( *se != 0 and (atom_t) (*se)->user_data_and_flags[SLIST_FLAGS] & SLIST_FLAG_DELETED )
00048     (*se) = (struct slist_element *) (*se)->next;
00049 
00050   return;
00051 }
00052 
00053 #endif /* !HLX_BUILD_WITH_PARALLEL_THREADING */
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines