Helixis 1.0
Task Programming API
Functions | Variables
sources/liblfds/slist/slist_link.c File Reference
#include "slist_internal.h"

Go to the source code of this file.

Functions

void slist_internal_link_element_to_head (struct slist_state *ss, 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)

Variables

hlx_api gl_api

Function Documentation

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 ss,
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;
}

Variable Documentation

Definition at line 42 of file api.c.

 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines