![]() |
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;
}
1.7.4