Exemple #1
0
/**
 * Erase a range of element in an hash_multimap.
 */
void hash_multimap_erase_range(hash_multimap_t* phmmap_map, hash_multimap_iterator_t it_begin, hash_multimap_iterator_t it_end)
{
    assert(phmmap_map != NULL);
    assert(_pair_is_inited(&phmmap_map->_pair_temp));
    assert(_HASH_MULTIMAP_ITERATOR_CONTAINER_TYPE(it_begin) == _HASH_MULTIMAP_CONTAINER);
    assert(_HASH_MULTIMAP_ITERATOR_ITERATOR_TYPE(it_begin) == _BIDIRECTIONAL_ITERATOR);
    assert(_HASH_MULTIMAP_ITERATOR_CONTAINER_TYPE(it_end) == _HASH_MULTIMAP_CONTAINER);
    assert(_HASH_MULTIMAP_ITERATOR_ITERATOR_TYPE(it_end) == _BIDIRECTIONAL_ITERATOR);
    assert(_HASH_MULTIMAP_ITERATOR_CONTAINER(it_begin) == phmmap_map);
    assert(_HASH_MULTIMAP_ITERATOR_CONTAINER(it_end) == phmmap_map);

    _hashtable_erase_range(&phmmap_map->_t_hashtable, it_begin, it_end);
}
/**
 * Return an iterator range that is equal to a specific element.
 */
range_t _hash_multimap_equal_range_varg(const hash_multimap_t* cphmmap_map, va_list val_elemlist)
{
    range_t  r_range;

    assert(cphmmap_map != NULL);

    _type_get_varg_value(&((hash_multimap_t*)cphmmap_map)->_pair_temp._t_typeinfofirst, val_elemlist, cphmmap_map->_pair_temp._pv_first);

    r_range = _hashtable_equal_range(&cphmmap_map->_t_hashtable, &cphmmap_map->_pair_temp);

    _ITERATOR_CONTAINER(r_range.it_begin) = (hash_multimap_t*)cphmmap_map;
    _HASH_MULTIMAP_ITERATOR_CONTAINER_TYPE(r_range.it_begin) = _HASH_MULTIMAP_CONTAINER;
    _HASH_MULTIMAP_ITERATOR_ITERATOR_TYPE(r_range.it_begin) = _BIDIRECTIONAL_ITERATOR;

    _ITERATOR_CONTAINER(r_range.it_end) = (hash_multimap_t*)cphmmap_map;
    _HASH_MULTIMAP_ITERATOR_CONTAINER_TYPE(r_range.it_end) = _HASH_MULTIMAP_CONTAINER;
    _HASH_MULTIMAP_ITERATOR_ITERATOR_TYPE(r_range.it_end) = _BIDIRECTIONAL_ITERATOR;

    return r_range;
}
Exemple #3
0
/**
 * Return an iterator that addresses the location succeeding the last element in the hash_multimap.
 */
hash_multimap_iterator_t hash_multimap_end(const hash_multimap_t* cphmmap_map)
{
    hash_multimap_iterator_t it_end;

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

    it_end = _hashtable_end(&cphmmap_map->_t_hashtable);

    _ITERATOR_CONTAINER(it_end) = (hash_multimap_t*)cphmmap_map;
    _HASH_MULTIMAP_ITERATOR_CONTAINER_TYPE(it_end) = _HASH_MULTIMAP_CONTAINER;
    _HASH_MULTIMAP_ITERATOR_ITERATOR_TYPE(it_end) = _BIDIRECTIONAL_ITERATOR;

    return it_end;
}
/**
 * Find specific element.
 */
hash_multimap_iterator_t _hash_multimap_find_varg(const hash_multimap_t* cphmmap_map, va_list val_elemlist)
{
    hash_multimap_iterator_t it_iter;

    assert(cphmmap_map != NULL);

    _type_get_varg_value(&((hash_multimap_t*)cphmmap_map)->_pair_temp._t_typeinfofirst, val_elemlist, cphmmap_map->_pair_temp._pv_first);

    it_iter = _hashtable_find(&cphmmap_map->_t_hashtable, &cphmmap_map->_pair_temp);

    _ITERATOR_CONTAINER(it_iter) = (hash_multimap_t*)cphmmap_map;
    _HASH_MULTIMAP_ITERATOR_CONTAINER_TYPE(it_iter) = _HASH_MULTIMAP_CONTAINER;
    _HASH_MULTIMAP_ITERATOR_ITERATOR_TYPE(it_iter) = _BIDIRECTIONAL_ITERATOR;

    return it_iter;
}
Exemple #5
0
/**
 * Inserts an unique element into a hash_multimap.
 */
hash_multimap_iterator_t hash_multimap_insert(hash_multimap_t* phmmap_map, const pair_t* cppair_pair)
{
    hash_multimap_iterator_t it_iter;

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

    ((pair_t*)cppair_pair)->_bfun_mapkeycompare = phmmap_map->_bfun_keycompare;
    ((pair_t*)cppair_pair)->_bfun_mapvaluecompare = phmmap_map->_bfun_valuecompare;
    assert(_hash_multimap_same_pair_type_ex(&phmmap_map->_pair_temp, cppair_pair));

    /* insert int hashtable */
    it_iter = _hashtable_insert_equal(&phmmap_map->_t_hashtable, cppair_pair);

    _ITERATOR_CONTAINER(it_iter) = phmmap_map;
    _HASH_MULTIMAP_ITERATOR_CONTAINER_TYPE(it_iter) = _HASH_MULTIMAP_CONTAINER;
    _HASH_MULTIMAP_ITERATOR_ITERATOR_TYPE(it_iter) = _BIDIRECTIONAL_ITERATOR;

    return it_iter;
}