2 #include "lfds710_hash_addonly_internal.h"
8 /****************************************************************************/
9 enum lfds710_hash_a_insert_result lfds710_hash_a_insert( struct lfds710_hash_a_state *has,
10 struct lfds710_hash_a_element *hae,
11 struct lfds710_hash_a_element **existing_hae )
13 enum lfds710_hash_a_insert_result
14 apr = LFDS710_HASH_A_PUT_RESULT_SUCCESS;
16 enum lfds710_btree_au_insert_result
22 struct lfds710_btree_au_element
25 LFDS710_PAL_ASSERT( has != NULL );
26 LFDS710_PAL_ASSERT( hae != NULL );
27 LFDS710_PAL_ASSERT( (lfds710_pal_uint_t) &hae->value % LFDS710_PAL_ALIGN_SINGLE_POINTER == 0 );
28 // TRD : existing_hae can be NULL
30 // TRD : alignment checks
31 LFDS710_PAL_ASSERT( (lfds710_pal_uint_t) &hae->baue % LFDS710_PAL_ALIGN_SINGLE_POINTER == 0 );
33 has->key_hash_function( hae->key, &hash );
35 LFDS710_BTREE_AU_SET_KEY_IN_ELEMENT( hae->baue, hae->key );
36 LFDS710_BTREE_AU_SET_VALUE_IN_ELEMENT( hae->baue, hae );
38 alr = lfds710_btree_au_insert( has->baus_array + (hash % has->array_size), &hae->baue, &existing_baue );
42 case LFDS710_BTREE_AU_INSERT_RESULT_FAILURE_EXISTING_KEY:
43 if( existing_hae != NULL )
44 *existing_hae = LFDS710_BTREE_AU_GET_VALUE_FROM_ELEMENT( *existing_baue );
46 apr = LFDS710_HASH_A_PUT_RESULT_FAILURE_EXISTING_KEY;
49 case LFDS710_BTREE_AU_INSERT_RESULT_SUCCESS_OVERWRITE:
50 apr = LFDS710_HASH_A_PUT_RESULT_SUCCESS_OVERWRITE;
53 case LFDS710_BTREE_AU_INSERT_RESULT_SUCCESS:
54 apr = LFDS710_HASH_A_PUT_RESULT_SUCCESS;