Helixis 1.0
Task Programming API
sources/liblfds/slist/slist_internal.h
Go to the documentation of this file.
00001 /***** the library wide include file *****/
00002 #include "liblfds/liblfds_internal.h"
00003 
00004 #if defined(HLX_BUILD_WITH_PARALLEL_THREADING)
00005 
00006 /***** defines *****/
00007 #define SLIST_USER_DATA  0
00008 #define SLIST_FLAGS      1
00009 
00010 #define SLIST_NO_FLAGS      0x0
00011 #define SLIST_FLAG_DELETED  0x1
00012 
00013 /***** structures *****/
00014 #pragma pack( push, ALIGN_SINGLE_POINTER )
00015 
00016 struct slist_state
00017 {
00018   struct slist_element
00019     *volatile head;
00020 
00021   void
00022     (*user_data_delete_function)( void *user_data, void *user_state ),
00023     *user_state;
00024 };
00025 
00026 #pragma pack( pop )
00027 
00028 #pragma pack( push, ALIGN_DOUBLE_POINTER )
00029 
00030 /* TRD : this pragma pack doesn't seem to work under Windows
00031          if the structure members are the correct way round
00032          (next first), then user_data_and_flags ends up on
00033          a single pointer boundary and DCAS crashes
00034 
00035          accordingly, I've moved user_data_and_flags first
00036 */
00037 
00038 struct slist_element
00039 {
00040   void
00041     *volatile user_data_and_flags[2];
00042 
00043   /* TRD : requires volatile as is target of CAS */
00044   struct slist_element
00045     *volatile next;
00046 };
00047 
00048 #pragma pack( pop )
00049 
00050 /***** private prototypes *****/
00051 void slist_internal_init_slist( struct slist_state *ss, void (*user_data_delete_function)(void *user_data, void *user_state), void *user_state );
00052 
00053 void slist_internal_link_element_to_head( struct slist_state *slist_state, struct slist_element *volatile se );
00054 void slist_internal_link_element_after_element( struct slist_element *volatile slist_in_list_element, struct slist_element *volatile se );
00055 
00056 void slist_internal_move_to_first_undeleted_element( struct slist_element **se );
00057 
00058 #endif
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines