Ejemplo n.º 1
0
/**
 * 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));
}
Ejemplo n.º 2
0
/**
 * 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
}
Ejemplo n.º 3
0
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
}