Helixis 1.0
Task Programming API
Data Structures | Defines | Functions
sources/liblfds/slist/slist_internal.h File Reference
#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 Documentation

#define SLIST_FLAG_DELETED   0x1
#define SLIST_FLAGS   1
#define SLIST_NO_FLAGS   0x0

Definition at line 10 of file slist_internal.h.

Referenced by slist_new_head().

#define SLIST_USER_DATA   0

Function Documentation

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;
}
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines