Ejemplo n.º 1
0
multimap_iterator_t _multimap_find_varg(
    const multimap_t* cpt_multimap, va_list val_elemlist)
{
    multimap_iterator_t t_iterator;

    assert(cpt_multimap != NULL);

    /* get key */
    _get_varg_value(
        cpt_multimap->_t_pair.first, 
        val_elemlist, 
        cpt_multimap->_t_pair._t_firsttypesize,
        cpt_multimap->_t_pair._sz_firsttypename);
    /* find key in tree */
#ifdef CSTL_MULTIMAP_AVL_TREE
    t_iterator = _avl_tree_find(
        _GET_MULTIMAP_AVL_TREE(cpt_multimap), &cpt_multimap->_t_pair);
#else
    t_iterator = _rb_tree_find(
        _GET_MULTIMAP_RB_TREE(cpt_multimap), &cpt_multimap->_t_pair);
#endif

    _GET_CONTAINER(&t_iterator) = (multimap_t*)cpt_multimap;
    _GET_MULTIMAP_CONTAINER_TYPE(&t_iterator) = _MULTIMAP_CONTAINER;
    _GET_MULTIMAP_ITERATOR_TYPE(&t_iterator) = _BIDIRECTIONAL_ITERATOR;

    return t_iterator;
}
Ejemplo n.º 2
0
/**
 * Find specific element.
 */
set_iterator_t _set_find_varg(const set_t* cpset_set, va_list val_elemlist)
{
    set_iterator_t it_iter;
    void*          pv_varg = NULL;

    assert(cpset_set != NULL);

    pv_varg = _alloc_allocate(&((set_t*)cpset_set)->_t_tree._t_allocator, _GET_SET_TYPE_SIZE(cpset_set), 1);
    assert(pv_varg != NULL);
    _set_get_varg_value_auxiliary((set_t*)cpset_set, val_elemlist, pv_varg);

#ifdef CSTL_SET_AVL_TREE
    it_iter = _avl_tree_find(&cpset_set->_t_tree, pv_varg);
#else
    it_iter = _rb_tree_find(&cpset_set->_t_tree, pv_varg);
#endif

    _set_destroy_varg_value_auxiliary((set_t*)cpset_set, pv_varg);
    _alloc_deallocate(&((set_t*)cpset_set)->_t_tree._t_allocator, pv_varg, _GET_SET_TYPE_SIZE(cpset_set), 1);

    _ITERATOR_CONTAINER(it_iter) = (set_t*)cpset_set;
    _SET_ITERATOR_CONTAINER_TYPE(it_iter) = _SET_CONTAINER;
    _SET_ITERATOR_ITERATOR_TYPE(it_iter) = _BIDIRECTIONAL_ITERATOR;

    return it_iter;
}
Ejemplo n.º 3
0
/**
 * Inserts an unique element into a avl tree.
 */
_avl_tree_iterator_t _avl_tree_insert_unique(_avl_tree_t* pt_avl_tree, const void* cpv_value)
{
    assert(pt_avl_tree != NULL);
    assert(cpv_value != NULL);
    assert(_avl_tree_is_inited(pt_avl_tree));

    /* if the avl tree is empty */
    if (_avl_tree_empty(pt_avl_tree)) {
        return _avl_tree_insert_equal(pt_avl_tree, cpv_value);
    } else {
        /* find value in avl tree */
        _avl_tree_iterator_t it_iter = _avl_tree_find(pt_avl_tree, cpv_value);
        /* if the value is exist */
        if (!_avl_tree_iterator_equal(it_iter, _avl_tree_end(pt_avl_tree))) {
            return _avl_tree_end(pt_avl_tree);
        } else {
            /* insert value into avl tree */
            return _avl_tree_insert_equal(pt_avl_tree, cpv_value);
        }
    }
}
Ejemplo n.º 4
0
/**
 * Find specific element.
 */
map_iterator_t _map_find_varg(const map_t* cpmap_map, va_list val_elemlist)
{
    map_iterator_t it_iter;

    assert(cpmap_map != NULL);
    assert(_pair_is_inited(&cpmap_map->_pair_temp));

    /* get key */
    _type_get_varg_value(&((map_t*)cpmap_map)->_pair_temp._t_typeinfofirst, val_elemlist, cpmap_map->_pair_temp._pv_first);
    /* find key in tree */
#ifdef CSTL_MAP_AVL_TREE
    it_iter = _avl_tree_find(&cpmap_map->_t_tree, &cpmap_map->_pair_temp);
#else
    it_iter = _rb_tree_find(&cpmap_map->_t_tree, &cpmap_map->_pair_temp);
#endif

    _ITERATOR_CONTAINER(it_iter) = (map_t*)cpmap_map;
    _MAP_ITERATOR_CONTAINER_TYPE(it_iter) = _MAP_CONTAINER;
    _MAP_ITERATOR_ITERATOR_TYPE(it_iter) = _BIDIRECTIONAL_ITERATOR;

    return it_iter;
}