macro LFDS710_STACK_GET_KEY_FROM_ELEMENT

From liblfds.org
Revision as of 21:05, 7 May 2016 by Admin (talk | contribs) (1 revision imported)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Source Files

└───liblfds710
    └───inc
        └───liblfds710
                lfds710_stack.h

Opaque Structures

struct lfds710_stack_element;

Macro

#define LFDS710_STACK_GET_KEY_FROM_ELEMENT( stack_element )

Parameters

stack_element

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

Return Value

Returns a void pointer, the key from the element.

Notes

The key set into a stack element is only guranteed to be visible to another logical core once the element has been popped by a thread running on that logical core.

So, for example, if there was a globally allocated stack element, where a thread on logical core A set a value nd then pushed the element to the stack, a thread on logical core B would only be guaranteed to see the key set by the other thread once it pops the element from the stack.

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

The key is not used in any way by the stack, and is provided for convenience when moving keys and values between different data structures.

Example

#include <stdio.h>
#include "liblfds710.h"

int main()
{
  char
    stack_element_name[64] = "Hudzen-10",
    *stack_element_name_temp;

  struct lfds710_misc_prng_state
    ps;

  struct lfds710_stack_element
    se,
    *se_temp;

  struct lfds710_stack_state
    ss;

  lfds710_misc_library_init_valid_on_current_logical_core();
 
  lfds710_misc_prng_init( &ps );

  lfds710_stack_init_valid_on_current_logical_core( &ss, NULL );

  LFDS710_STACK_SET_KEY_IN_ELEMENT( &se, (void *) stack_element_name );

  lfds710_stack_push( &ss, &se, &ps );

  lfds710_stack_pop( &ss, &se_temp, &ps );

  stack_element_name_temp = (char *) LFDS710_STACK_GET_KEY_FROM_ELEMENT( *ss_temp );

  printf( "stack element name is \"%s\"\n", (char *) stack_element_name_temp );

  lfds710_stack_cleanup( &ss, NULL );

  lfds710_misc_library_cleanup();

  return( EXIT_SUCCESS );
}

See Also