https://www.liblfds.org/mediawiki/index.php?title=r7.1.0:Macro_LFDS710_BTREE_AU_GET_VALUE_FROM_ELEMENT&feed=atom&action=history
r7.1.0:Macro LFDS710 BTREE AU GET VALUE FROM ELEMENT - Revision history
2024-03-29T00:56:03Z
Revision history for this page on the wiki
MediaWiki 1.36.0
https://www.liblfds.org/mediawiki/index.php?title=r7.1.0:Macro_LFDS710_BTREE_AU_GET_VALUE_FROM_ELEMENT&diff=734&oldid=prev
Admin: 1 revision imported
2016-05-07T21:04:59Z
<p>1 revision imported</p>
<p><b>New page</b></p><div>{{DISPLAYTITLE:macro LFDS710_BTREE_AU_GET_VALUE_FROM_ELEMENT}}<br />
==Source File==<br />
└───liblfds710<br />
└───inc<br />
└───liblfds710<br />
lfds710_btree_addonly_unbalanced.h<br />
<br />
==Opaque Structures==<br />
struct [[r7.1.0:struct lfds710_btree_au_element|lfds710_btree_au_element]];<br />
<br />
==Macro==<br />
#define LFDS710_BTREE_AU_GET_VALUE_FROM_ELEMENT( btree_au_element )<br />
<br />
==Parameters==<br />
''btree_au_element''<br />
: A ''struct lfds710_btree_au_element''. Not a pointer to it - the struct itself.<br />
<br />
==Return Value==<br />
Returns a void pointer, the value from the element.<br />
<br />
==Notes==<br />
The value in an element is set atomically by ''LFDS710_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.<br />
<br />
As with all ''liblfds'' macros, the macro operates on the structure itself, not a pointer to it.<br />
<br />
==Example==<br />
#include <stdio.h><br />
#include "liblfds710.h"<br />
<br />
struct test_data<br />
{<br />
int long long unsigned<br />
unique_id;<br />
<br />
char<br />
payload[64];<br />
<br />
struct lfds710_btree_au_element<br />
buae;<br />
};<br />
<br />
int key_compare_function( void const *new_key, void const *existing_key )<br />
{<br />
int<br />
cr = 0;<br />
<br />
int long long unsigned<br />
*new_key = (int long long unsigned *) new_key,<br />
*existing_key = (int long long unsigned *) existing_key;<br />
<br />
if( *new_key > *existing_key )<br />
cr = 1;<br />
<br />
if( *new_key < *existing_key )<br />
cr = -1;<br />
<br />
return( cr );<br />
}<br />
<br />
int main()<br />
{<br />
struct lfds710_btree_au_element<br />
*buae;<br />
<br />
struct lfds710_btree_au_state<br />
baus;<br />
<br />
struct lfds710_misc_prng_state<br />
ps;<br />
<br />
struct test_data<br />
td = { 15, "Germanium-76" },<br />
*temp_td;<br />
<br />
lfds710_misc_library_init_valid_on_current_logical_core();<br />
<br />
lfds710_misc_prng_init( &ps );<br />
<br />
lfds710_btree_au_init_valid_on_current_logical_core( &baus, key_compare_function, LFDS710_BTREE_AU_EXISTING_KEY_FAIL, NULL );<br />
<br />
LFDS710_BTREE_AU_SET_KEY_IN_ELEMENT( td.baue, &td.unique_id );<br />
LFDS710_BTREE_AU_SET_VALUE_IN_ELEMENT( td.baue, &td );<br />
lfds710_btree_au_link( baus, &td.baue, NULL, &ps );<br />
<br />
lfds710_btree_au_get_by_position( &baus, &baue, LFDS710_BTREE_AU_ROOT );<br />
<br />
temp_td = LFDS710_BTREE_AU_GET_VALUE_FROM_ELEMENT( *baue );<br />
<br />
printf( "payload in element is \"%s\"\n", temp_td->payload );<br />
<br />
lfds710_btree_au_cleanup( &baus );<br />
<br />
lfds710_misc_library_cleanup();<br />
<br />
return( EXIT_SUCCESS );<br />
}<br />
<br />
==See Also==<br />
* [[r7.1.0:Binary Tree (add-only, unbalanced)|Binary Tree (add-only, unbalanced)]]</div>
Admin