Difference between pages "r7.1.1:Macro LFDS711 LIST ASU GET USER STATE FROM STATE" and "r7.1.1:Macro LFDS711 LIST ASU GET VALUE FROM ELEMENT"

From liblfds.org
(Difference between pages)
Jump to navigation Jump to search
m (1 revision imported)
 
m (1 revision imported)
 
Line 1: Line 1:
{{DISPLAYTITLE:macro LFDS711_LIST_ASU_GET_USER_STATE_FROM_STATE}}
{{DISPLAYTITLE:macro LFDS711_LIST_ASU_GET_VALUE_FROM_ELEMENT}}
==Source File==
==Source File==
  └───liblfds711
  └───liblfds711
Line 7: Line 7:


==Opaque Structures==
==Opaque Structures==
  struct [[r7.1.1:struct lfds711_list_asu_state|lfds711_list_asu_state]];
  struct [[r7.1.1:struct lfds711_list_asu_element|lfds711_list_asu_element]];


==Macro==
==Macro==
  #define LFDS711_LIST_ASU_GET_USER_STATE_FROM_STATE( list_asu_state )
  #define LFDS711_LIST_ASU_GET_VALUE_FROM_ELEMENT( list_asu_element )


==Parameters==
==Parameters==
''list_asu_state''
''list_asu_element''
: An initialized ''struct lfds711_list_asu_state''.  Not a pointer to it - the struct itself.
: A ''struct lfds711_list_asu_element''.  Not a pointer to it - the struct itself.


==Return Value==
==Return Value==
Returns a ''void *'', the ''user_state'' argument from ''[[r7.1.1:function lfds711_list_asu_init_valid_on_current_logical_core|lfds711_list_asu_init_valid_on_current_logical_core]]''.
Returns a void pointer, the value from the element.


==Notes==
==Notes==
The user state value can only be set the once, when the data structure instance is initialized.
As with all ''liblfds'' macros, the macro operates on the structure itself, not a pointer to it.


As with all ''liblfds'' macros, the macro operates on the structure itself, not a pointer to it.
The value in an element is set and set atomically by ''LFDS711_LIST_ASU_SET_VALUE_IN_ELEMENT'' and this get macro issues a load barrier before reading, which ensures that by the time ''LFDS711_LIST_ASU_SET_VALUE_IN_ELEMENT'' returns, the value set will be seen by all readers.
 
This contrasts to the bouded, single consumer, single producer queue, which only guarantees that the order of queuing will be honoured; it does not guarantee that by the time the enqueue function returns, readers will be able to dequeue the newly enqueued element.


==Example==
==Example==
#include "liblfds711.h"
#include <stdio.h>
#include <string.h>
int main()
{
  char
    list_asu_name[64] = "Do You Love Me";
  struct lfds711_list_asu_state
    lasus;
  void
    *user_state;
  lfds711_misc_library_init_valid_on_current_logical_core();
  lfds711_list_asu_init_valid_on_current_logical_core( &lasus, NULL, (void *) list_asu_name );
  user_state = LFDS711_LIST_ASU_GET_USER_STATE_FROM_STATE( lasus );
  printf( "list_asu name is \"%s\"\n", (char *) user_state );
  lfds711_list_asu_cleanup( &lasus, NULL );
  lfds711_misc_library_cleanup();
  return( EXIT_SUCCESS );
}


==See Also==
==See Also==
* [[r7.1.1:List (add-only, singly-linked, unordered)|List (add-only, singly-linked, unordered)]]
* [[r7.1.1:List (add-only, singly-linked, unordered)|List (add-only, singly-linked, unordered)]]

Latest revision as of 18:12, 16 February 2017

Source File

└───liblfds711
    └───inc
        └───liblfds711
                lfds711_list_addonly_singlylinked_unordered.h

Opaque Structures

struct lfds711_list_asu_element;

Macro

#define LFDS711_LIST_ASU_GET_VALUE_FROM_ELEMENT( list_asu_element )

Parameters

list_asu_element

A struct lfds711_list_asu_element. Not a pointer to it - the struct itself.

Return Value

Returns a void pointer, the value from the element.

Notes

As with all liblfds macros, the macro operates on the structure itself, not a pointer to it.

The value in an element is set and set atomically by LFDS711_LIST_ASU_SET_VALUE_IN_ELEMENT and this get macro issues a load barrier before reading, which ensures that by the time LFDS711_LIST_ASU_SET_VALUE_IN_ELEMENT returns, the value set will be seen by all readers.

This contrasts to the bouded, single consumer, single producer queue, which only guarantees that the order of queuing will be honoured; it does not guarantee that by the time the enqueue function returns, readers will be able to dequeue the newly enqueued element.

Example

See Also