![]() |
Helixis 1.0
Task Programming API
|
#include "liblfds/liblfds_internal.h"
Go to the source code of this file.
Data Structures | |
struct | slist_state |
struct | slist_element |
Defines | |
#define | SLIST_USER_DATA 0 |
#define | SLIST_FLAGS 1 |
#define | SLIST_NO_FLAGS 0x0 |
#define | SLIST_FLAG_DELETED 0x1 |
Functions | |
void | slist_internal_init_slist (struct slist_state *ss, void(*user_data_delete_function)(void *user_data, void *user_state), void *user_state) |
void | slist_internal_link_element_to_head (struct slist_state *slist_state, struct slist_element *volatile se) |
void | slist_internal_link_element_after_element (struct slist_element *volatile slist_in_list_element, struct slist_element *volatile se) |
void | slist_internal_move_to_first_undeleted_element (struct slist_element **se) |
#define SLIST_FLAG_DELETED 0x1 |
Definition at line 11 of file slist_internal.h.
Referenced by slist_get_user_data_from_element(), and slist_internal_move_to_first_undeleted_element().
#define SLIST_FLAGS 1 |
Definition at line 8 of file slist_internal.h.
Referenced by slist_get_user_data_from_element(), slist_internal_move_to_first_undeleted_element(), and slist_new_head().
#define SLIST_NO_FLAGS 0x0 |
Definition at line 10 of file slist_internal.h.
Referenced by slist_new_head().
#define SLIST_USER_DATA 0 |
Definition at line 7 of file slist_internal.h.
Referenced by slist_delete_all_elements(), slist_get_user_data_from_element(), and slist_new_head().
void slist_internal_init_slist | ( | struct slist_state * | ss, |
void(*)(void *user_data, void *user_state) | user_data_delete_function, | ||
void * | user_state | ||
) |
Definition at line 25 of file slist_new.c.
References slist_state::head, slist_state::user_data_delete_function, and slist_state::user_state.
Referenced by slist_delete_all_elements(), and slist_new().
{ /* TRD : user_data_delete_function can be 0 */ /* TRD : user_state can be 0 */ ss->head = 0; ss->user_data_delete_function = user_data_delete_function; ss->user_state = user_state; return; }
void slist_internal_link_element_after_element | ( | struct slist_element *volatile | slist_in_list_element, |
struct slist_element *volatile | se | ||
) |
Definition at line 21 of file slist_link.c.
References ALIGN, ALIGN_SINGLE_POINTER, hlx_api::atomic_cas_entry, and slist_element::next.
{ ALIGN(ALIGN_SINGLE_POINTER) struct slist_element *se_prev, *se_next; se_prev = (struct slist_element *) slist_in_list_element; se_next = se_prev->next; do { se->next = se_next; } while( se->next != (se_next = (struct slist_element *) gl_api.atomic_cas_entry((volatile atom_t *) &se_prev->next, (atom_t) se, (atom_t) se->next)) ); return; }
void slist_internal_link_element_to_head | ( | struct slist_state * | slist_state, |
struct slist_element *volatile | se | ||
) |
Definition at line 5 of file slist_link.c.
References ALIGN, ALIGN_SINGLE_POINTER, hlx_api::atomic_cas_entry, slist_state::head, and slist_element::next.
Referenced by slist_new_head().
{ ALIGN(ALIGN_SINGLE_POINTER) struct slist_element *se_next; se_next = ss->head; do { se->next = se_next; } while( se->next != (se_next = (struct slist_element *) gl_api.atomic_cas_entry((volatile atom_t *) &ss->head, (atom_t) se, (atom_t) se->next)) ); return; }
void slist_internal_move_to_first_undeleted_element | ( | struct slist_element ** | se | ) |
Definition at line 45 of file slist_get_and_set.c.
References and, SLIST_FLAG_DELETED, and SLIST_FLAGS.
Referenced by slist_get_head(), and slist_get_next().
{ while( *se != 0 and (atom_t) (*se)->user_data_and_flags[SLIST_FLAGS] & SLIST_FLAG_DELETED ) (*se) = (struct slist_element *) (*se)->next; return; }