Exemplo n.º 1
0
/**
 * Calculate distance between two iterators.
 */
int _rb_tree_iterator_distance(_rb_tree_iterator_t it_first, _rb_tree_iterator_t it_second)
{
    _rb_tree_iterator_t it_iter;
    int                 n_distance = 0;

    assert(_rb_tree_iterator_belong_to_rb_tree(_RB_TREE_ITERATOR_TREE(it_first), it_first));
    assert(_rb_tree_iterator_belong_to_rb_tree(_RB_TREE_ITERATOR_TREE(it_second), it_second));
    assert(_RB_TREE_ITERATOR_TREE(it_first) == _RB_TREE_ITERATOR_TREE(it_second));

    if (_rb_tree_iterator_before(it_first, it_second)) {
        for (it_iter = it_first; !_rb_tree_iterator_equal(it_iter, it_second); it_iter = _rb_tree_iterator_next(it_iter)) {
            n_distance++;
        }

        return n_distance;
    } else if (_rb_tree_iterator_before(it_second, it_first)) {
        for (it_iter = it_second; !_rb_tree_iterator_equal(it_iter, it_first); it_iter = _rb_tree_iterator_next(it_iter)) {
            n_distance++;
        }

        return -n_distance;
    } else {
        return 0;
    }
}
Exemplo n.º 2
0
/**
 * Test the first iterator is before the second.
 */
bool_t _set_iterator_before(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_before(it_first, it_second);
#else
    return _rb_tree_iterator_before(it_first, it_second);
#endif
}
void test__rb_tree_iterator_before__invalid_second(void** state)
{
    _rb_tree_t* pt_rb_tree = _create_rb_tree("int");
    _rb_tree_iterator_t it_first;
    _rb_tree_iterator_t it_second;

    _rb_tree_init(pt_rb_tree, NULL);
    it_first = _rb_tree_begin(pt_rb_tree);
    it_second = _rb_tree_begin(pt_rb_tree);
    it_second._t_pos._t_treepos._pby_corepos = NULL;
    expect_assert_failure(_rb_tree_iterator_before(it_first, it_second));

    _rb_tree_destroy(pt_rb_tree);
}
void test__rb_tree_iterator_before__equal(void** state)
{
    _rb_tree_t* pt_rb_tree = _create_rb_tree("int");
    _rb_tree_iterator_t it_first;
    _rb_tree_iterator_t it_second;
    int elem = 100;

    _rb_tree_init(pt_rb_tree, NULL);
    _rb_tree_insert_unique(pt_rb_tree, &elem);
    it_first = _rb_tree_begin(pt_rb_tree);
    it_second = _rb_tree_begin(pt_rb_tree);
    assert_false(_rb_tree_iterator_before(it_first, it_second));

    _rb_tree_destroy(pt_rb_tree);
}
void test__rb_tree_iterator_before__not_same_rb_tree(void** state)
{
    _rb_tree_t* pt_first = _create_rb_tree("int");
    _rb_tree_t* pt_second = _create_rb_tree("int");
    _rb_tree_iterator_t it_first;
    _rb_tree_iterator_t it_second;

    _rb_tree_init(pt_first, NULL);
    _rb_tree_init(pt_second, NULL);
    it_first = _rb_tree_begin(pt_first);
    it_second = _rb_tree_begin(pt_second);
    expect_assert_failure(_rb_tree_iterator_before(it_first, it_second));

    _rb_tree_destroy(pt_first);
    _rb_tree_destroy(pt_second);
}
Exemplo n.º 6
0
bool_t _map_iterator_before(
    const map_iterator_t* cpt_iteratorfirst, const map_iterator_t* cpt_iteratorsecond)
{
    assert(cpt_iteratorfirst != NULL && cpt_iteratorsecond != NULL);
    assert(
        _GET_MAP_CONTAINER_TYPE(cpt_iteratorfirst) == _MAP_CONTAINER &&
        _GET_MAP_ITERATOR_TYPE(cpt_iteratorfirst) == _BIDIRECTIONAL_ITERATOR &&
        _GET_MAP_CONTAINER_TYPE(cpt_iteratorsecond) == _MAP_CONTAINER &&
        _GET_MAP_ITERATOR_TYPE(cpt_iteratorsecond) == _BIDIRECTIONAL_ITERATOR &&
        _GET_MAP_CONTAINER(cpt_iteratorfirst) == _GET_MAP_CONTAINER(cpt_iteratorsecond));

#ifdef CSTL_MAP_AVL_TREE
    return _avl_tree_iterator_before(cpt_iteratorfirst, cpt_iteratorsecond);
#else
    return _rb_tree_iterator_before(cpt_iteratorfirst, cpt_iteratorsecond);
#endif
}