/** * Return the number of specific elements in an avl tree */ size_t _avl_tree_count(const _avl_tree_t* cpt_avl_tree, const void* cpv_value) { range_t r_range; assert(cpt_avl_tree != NULL); assert(cpv_value != NULL); assert(_avl_tree_is_inited(cpt_avl_tree)); r_range = _avl_tree_equal_range(cpt_avl_tree, cpv_value); return abs(_avl_tree_iterator_distance(r_range.it_begin, r_range.it_end)); }
/** * Calculate distance between two iterators. */ int _set_iterator_distance(set_iterator_t it_first, set_iterator_t it_second) { assert(_GET_SET_CONTAINER_TYPE(it_first) == _SET_CONTAINER); assert(_GET_SET_ITERATOR_TYPE(it_first) == _BIDIRECTIONAL_ITERATOR); assert(_GET_SET_CONTAINER_TYPE(it_second) == _SET_CONTAINER); assert(_GET_SET_ITERATOR_TYPE(it_second) == _BIDIRECTIONAL_ITERATOR); assert(_GET_SET_CONTAINER(it_first) == _GET_SET_CONTAINER(it_second)); #ifdef CSTL_SET_AVL_TREE return _avl_tree_iterator_distance(it_first, it_second); #else return _rb_tree_iterator_distance(it_first, it_second); #endif }
int _multimap_iterator_distance( const multimap_iterator_t* cpt_begin, const multimap_iterator_t* cpt_end) { assert(cpt_begin != NULL && cpt_end != NULL); assert( _GET_MULTIMAP_CONTAINER_TYPE(cpt_begin) == _MULTIMAP_CONTAINER && _GET_MULTIMAP_ITERATOR_TYPE(cpt_begin) == _BIDIRECTIONAL_ITERATOR && _GET_MULTIMAP_CONTAINER_TYPE(cpt_end) == _MULTIMAP_CONTAINER && _GET_MULTIMAP_ITERATOR_TYPE(cpt_end) == _BIDIRECTIONAL_ITERATOR && _GET_MULTIMAP_CONTAINER(cpt_begin) == _GET_MULTIMAP_CONTAINER(cpt_end)); #ifdef CSTL_MULTIMAP_AVL_TREE return _avl_tree_iterator_distance(cpt_begin, cpt_end); #else return _rb_tree_iterator_distance(cpt_begin, cpt_end); #endif }