macro LFDS711_BTREE_AU_GET_KEY_FROM_ELEMENT

From liblfds.org
Jump to navigation Jump to search

Source File

└───liblfds711
    └───inc
        └───liblfds711
                lfds711_btree_addonly_unbalanced.h

Opaque Structures

struct lfds711_btree_au_element;

Macro

#define LFDS711_BTREE_AU_GET_KEY_FROM_ELEMENT( btree_au_element )

Parameters

btree_au_element

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

Return Value

Returns a void pointer, the key from the element.

Notes

The key once set in an element is only guaranteed to be read correctly by other logical cores once the element has been linked to the tree.

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

Example

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

struct test_data
{
  int long long unsigned
    unique_id;

  char
    payload[64];

  struct lfds711_btree_au_element
    buae;
};

int key_compare_function( void const *new_key, void const *existing_key )
{
  int
    cr = 0;

  int long long unsigned
    *new_key = (int long long unsigned *) new_key,
    *existing_key  = (int long long unsigned *) existing_key;

  if( *new_key > *existing_key )
    cr = 1;

  if( *new_key < *existing_key )
    cr = -1;

  return( cr );
}

int main()
{
  int long long unsigned
    *key;

  struct lfds711_btree_au_element
    *buae;

  struct lfds711_btree_au_state
    baus;

  struct lfds711_misc_prng_state
    ps;

  struct test_data
    td = { 15, "Barium-130" },
    *temp_td;

  lfds711_misc_library_init_valid_on_current_logical_core();

  lfds711_misc_prng_init( &ps );

  lfds711_btree_au_init_valid_on_current_logical_core( &baus, key_compare_function, LFDS711_BTREE_AU_EXISTING_KEY_FAIL, NULL );

  LFDS711_BTREE_AU_SET_KEY_IN_ELEMENT( td.baue, &td.unique_id );
  LFDS711_BTREE_AU_SET_VALUE_IN_ELEMENT( td.baue, &td );
  lfds711_btree_au_link( baus, &td.baue, NULL, &ps );

  lfds711_btree_au_get_by_position( &baus, &baue, LFDS711_BTREE_AU_ROOT );

  key = LFDS711_BTREE_AU_GET_KEY_FROM_ELEMENT( *baue );
  temp_td = LFDS711_BTREE_AU_GET_VALUE_FROM_ELEMENT( *baue );

  printf( "key in element is %llu\n"
          "payload in element is \"%s\"\n", *key, temp_td->payload );

  lfds711_btree_au_cleanup( &baus );

  lfds711_misc_library_cleanup();

  return( EXIT_SUCCESS );
}

See Also