/** * Get data value pointer referenced by iterator. */ const void* _rb_tree_iterator_get_pointer(_rb_tree_iterator_t it_iter) { assert(_rb_tree_iterator_belong_to_rb_tree(_RB_TREE_ITERATOR_TREE(it_iter), it_iter)); assert(!_rb_tree_iterator_equal(it_iter, _rb_tree_end(_RB_TREE_ITERATOR_TREE(it_iter)))); /* char* */ if (strncmp(_GET_RB_TREE_TYPE_BASENAME(_RB_TREE_ITERATOR_TREE(it_iter)), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0) { return (char*)string_c_str((string_t*)((_rbnode_t*)_RB_TREE_ITERATOR_COREPOS(it_iter))->_pby_data); } else { return ((_rbnode_t*)_RB_TREE_ITERATOR_COREPOS(it_iter))->_pby_data; } }
/** * Get data value referenced by iterator. */ void _rb_tree_iterator_get_value(_rb_tree_iterator_t it_iter, void* pv_value) { assert(pv_value != NULL); assert(_rb_tree_iterator_belong_to_rb_tree(_RB_TREE_ITERATOR_TREE(it_iter), it_iter)); assert(!_rb_tree_iterator_equal(it_iter, _rb_tree_end(_RB_TREE_ITERATOR_TREE(it_iter)))); /* char* */ if (strncmp(_GET_RB_TREE_TYPE_BASENAME(_RB_TREE_ITERATOR_TREE(it_iter)), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0) { *(char**)pv_value = (char*)string_c_str((string_t*)((_rbnode_t*)_RB_TREE_ITERATOR_COREPOS(it_iter))->_pby_data); } else { bool_t b_result = _GET_RB_TREE_TYPE_SIZE(_RB_TREE_ITERATOR_TREE(it_iter)); _GET_RB_TREE_TYPE_COPY_FUNCTION(_RB_TREE_ITERATOR_TREE(it_iter))( pv_value, ((_rbnode_t*)_RB_TREE_ITERATOR_COREPOS(it_iter))->_pby_data, &b_result); assert(b_result); } }
/** * Element compare function auxiliary */ void _rb_tree_elem_compare_auxiliary( const _rb_tree_t* cpt_rb_tree, const void* cpv_first, const void* cpv_second, void* pv_output) { assert(cpt_rb_tree != NULL); assert(cpv_first != NULL); assert(cpv_second != NULL); assert(pv_output != NULL); assert(_rb_tree_is_inited(cpt_rb_tree)); if(strncmp(_GET_RB_TREE_TYPE_BASENAME(cpt_rb_tree), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0 && cpt_rb_tree->_t_compare != _GET_RB_TREE_TYPE_LESS_FUNCTION(cpt_rb_tree)) { cpt_rb_tree->_t_compare(string_c_str((string_t*)cpv_first), string_c_str((string_t*)cpv_second), pv_output); } else { cpt_rb_tree->_t_compare(cpv_first, cpv_second, pv_output); } }