コード例 #1
0
ファイル: cstl_multiset.c プロジェクト: cffyh/libcstl
/*
 * Erase an element in an multiset from specificed position.
 */
void multiset_erase_pos(multiset_t* pmset_mset, multiset_iterator_t it_pos)
{
    assert(pmset_mset != NULL);
    assert(_MULTISET_ITERATOR_CONTAINER_TYPE(it_pos) == _MULTISET_CONTAINER);
    assert(_MULTISET_ITERATOR_ITERATOR_TYPE(it_pos) == _BIDIRECTIONAL_ITERATOR);
    assert(_MULTISET_ITERATOR_CONTAINER(it_pos) == pmset_mset);

#ifdef CSTL_MULTISET_AVL_TREE
    _avl_tree_erase_pos(&pmset_mset->_t_tree, it_pos);
#else
    _rb_tree_erase_pos(&pmset_mset->_t_tree, it_pos);
#endif
}
コード例 #2
0
ファイル: cstl_set.c プロジェクト: coderXing/libcstl
/*
 * Erase an element in an set from specificed position.
 */
void set_erase_pos(set_t* pset_set, set_iterator_t t_pos)
{
    assert(pset_set != NULL);
    assert(_SET_ITERATOR_CONTAINER_TYPE(t_pos) == _SET_CONTAINER);
    assert(_SET_ITERATOR_ITERATOR_TYPE(t_pos) == _BIDIRECTIONAL_ITERATOR);
    assert(_SET_ITERATOR_CONTAINER(t_pos) == pset_set);

#ifdef CSTL_SET_AVL_TREE
    _avl_tree_erase_pos(&pset_set->_t_tree, t_pos);
#else
    _rb_tree_erase_pos(&pset_set->_t_tree, t_pos);
#endif
}
コード例 #3
0
ファイル: cstl_multimap.c プロジェクト: Masshat/C_and_CPP
void multimap_erase_pos(multimap_t* pt_multimap, multimap_iterator_t t_pos)
{
    assert(pt_multimap != NULL);
    assert(
        _GET_MULTIMAP_CONTAINER_TYPE(&t_pos) == _MULTIMAP_CONTAINER &&
        _GET_MULTIMAP_ITERATOR_TYPE(&t_pos) == _BIDIRECTIONAL_ITERATOR &&
        _GET_MULTIMAP_CONTAINER(&t_pos) == pt_multimap);

#ifdef CSTL_MULTIMAP_AVL_TREE
    _avl_tree_erase_pos(_GET_MULTIMAP_AVL_TREE(pt_multimap), t_pos);
#else
    _rb_tree_erase_pos(_GET_MULTIMAP_RB_TREE(pt_multimap), t_pos);
#endif
}
コード例 #4
0
ファイル: cstl_map.c プロジェクト: astrotycoon/libcstl
/*
 * Erase an element in an map from specificed position.
 */
void map_erase_pos(map_t* pmap_map, map_iterator_t it_pos)
{
    assert(pmap_map != NULL);
    assert(_pair_is_inited(&pmap_map->_pair_temp));
    assert(_GET_MAP_CONTAINER_TYPE(it_pos) == _MAP_CONTAINER);
    assert(_GET_MAP_ITERATOR_TYPE(it_pos) == _BIDIRECTIONAL_ITERATOR);
    assert(_GET_MAP_CONTAINER(it_pos) == pmap_map);

#ifdef CSTL_MAP_AVL_TREE
    _avl_tree_erase_pos(&pmap_map->_t_tree, it_pos);
#else
    _rb_tree_erase_pos(&pmap_map->_t_tree, it_pos);
#endif
}
コード例 #5
0
ファイル: cstl_avl_tree.c プロジェクト: ChenHui109/libcstl
/*
 * Erase a range of element in an avl tree.
 */
void _avl_tree_erase_range(_avl_tree_t* pt_avl_tree, _avl_tree_iterator_t it_begin, _avl_tree_iterator_t it_end)
{
    _avl_tree_iterator_t it_iter;
    _avl_tree_iterator_t it_next;

    assert(pt_avl_tree != NULL);
    assert(_avl_tree_is_inited(pt_avl_tree));
    assert(_avl_tree_iterator_belong_to_avl_tree(pt_avl_tree, it_begin));
    assert(_avl_tree_iterator_belong_to_avl_tree(pt_avl_tree, it_end));
    assert(_avl_tree_iterator_equal(it_begin, it_end) || _avl_tree_iterator_before(it_begin, it_end));

    it_iter = it_next = it_begin;
    if (!_avl_tree_iterator_equal(it_next, _avl_tree_end(pt_avl_tree))) {
        it_next = _avl_tree_iterator_next(it_next);
    }
    while (!_avl_tree_iterator_equal(it_iter, it_end)) {
        _avl_tree_erase_pos(pt_avl_tree, it_iter);
        
        it_iter = it_next;
        if (!_avl_tree_iterator_equal(it_next, _avl_tree_end(pt_avl_tree))) {
            it_next = _avl_tree_iterator_next(it_next);
        }
    }
}