macro LFDS711_BTREE_AU_GET_VALUE_FROM_ELEMENT
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_VALUE_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 value from the element.
Notes
The value in an element is set atomically by LFDS711_BTREE_AU_SET_VALUE_IN_ELEMENT and this macro performs the necessary matching read-side work to ensure that it correctly reads the set value, the upshot being that the value can be safely and correctly read at any time, on any element, inside or outside of the btree.
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() { struct lfds711_btree_au_element *buae; struct lfds711_btree_au_state baus; struct lfds711_misc_prng_state ps; struct test_data td = { 15, "Germanium-76" }, *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 ); temp_td = LFDS711_BTREE_AU_GET_VALUE_FROM_ELEMENT( *baue ); printf( "payload in element is \"%s\"\n", temp_td->payload ); lfds711_btree_au_cleanup( &baus ); lfds711_misc_library_cleanup(); return( EXIT_SUCCESS ); }