/** * Test iterator referenced data is within the avl tree. */ bool_t _avl_tree_iterator_belong_to_avl_tree(const _avl_tree_t* cpt_avl_tree, _avl_tree_iterator_t it_iter) { assert(cpt_avl_tree != NULL); assert(_avl_tree_is_inited(cpt_avl_tree)); assert(_GET_AVL_TREE_COREPOS(it_iter) != NULL); assert(_GET_AVL_TREE(it_iter) == cpt_avl_tree); /* if iterator is end */ if(_GET_AVL_TREE_COREPOS(it_iter) == (_byte_t*)&cpt_avl_tree->_t_avlroot) { return true; } /* else travel avl tree for search the pointer */ else { return _avl_tree_avlnode_belong_to_avl_tree( cpt_avl_tree->_t_avlroot._pt_parent, (_avlnode_t*)_GET_AVL_TREE_COREPOS(it_iter)); } }
void* _map_at_varg(map_t* pt_map, va_list val_elemlist) { pair_t t_elempair; bool_t t_result = false; void* pv_value = NULL; #ifdef CSTL_MAP_AVL_TREE avl_tree_result_pair_t t_avlresult; #else rb_tree_result_pair_t t_rbresult; #endif assert(pt_map != NULL); t_elempair = _create_pair( pt_map->_t_pair._t_firsttypesize, pt_map->_t_pair._sz_firsttypename, pt_map->_t_pair._t_secondtypesize, pt_map->_t_pair._sz_secondtypename); pair_init(&t_elempair); _get_varg_value( t_elempair.first, val_elemlist, t_elempair._t_firsttypesize, t_elempair._sz_firsttypename); memset(t_elempair.second, 0x00, t_elempair._t_secondtypesize); #ifdef CSTL_MAP_AVL_TREE t_avlresult = _avl_tree_insert_unique(_GET_MAP_AVL_TREE(pt_map), &t_elempair); pv_value = ((pair_t*)((avlnode_t*) _GET_AVL_TREE_COREPOS(&t_avlresult._t_first))->_pc_data)->second; t_result = t_avlresult._t_second._t_bool; #else t_rbresult = _rb_tree_insert_unique(_GET_MAP_RB_TREE(pt_map), &t_elempair); pv_value = ((pair_t*)((rbnode_t*) _GET_RB_TREE_COREPOS(&t_rbresult._t_first))->_pc_data)->second; t_result = t_rbresult._t_second._t_bool; #endif assert(pv_value != NULL); /* destroy the pair when inserting failed */ if(!t_result) { pair_destroy(&t_elempair); } return pv_value; }