/**
 * Tests if the first hash_multimap is greater than or equal to the second hash_multimap.
 */
bool_t hash_multimap_greater_equal(const hash_multimap_t* cphmmap_first, const hash_multimap_t* cphmmap_second)
{
    assert(cphmmap_first != NULL);
    assert(cphmmap_second != NULL);
    assert(_pair_is_inited(&cphmmap_first->_pair_temp));
    assert(_pair_is_inited(&cphmmap_second->_pair_temp));
    assert(_hash_multimap_same_pair_type_ex(&cphmmap_first->_pair_temp, &cphmmap_second->_pair_temp));

    return _hashtable_greater_equal(&cphmmap_first->_t_hashtable, &cphmmap_second->_t_hashtable);
}
/**
 * Swap the datas of first hash_multimap and second hash_multimap.
 */
void hash_multimap_swap(hash_multimap_t* phmmap_first, hash_multimap_t* phmmap_second)
{
    assert(phmmap_first != NULL);
    assert(phmmap_second != NULL);
    assert(_pair_is_inited(&phmmap_first->_pair_temp));
    assert(_pair_is_inited(&phmmap_second->_pair_temp));
    assert(_hash_multimap_same_pair_type_ex(&phmmap_first->_pair_temp, &phmmap_second->_pair_temp));

    _hashtable_swap(&phmmap_first->_t_hashtable, &phmmap_second->_t_hashtable);
}
Exemple #3
0
/**
 * Assign hash_multimap container.
 */
void hash_multimap_assign(hash_multimap_t* phmmap_dest, const hash_multimap_t* cphmmap_src)
{
    assert(phmmap_dest != NULL);
    assert(cphmmap_src != NULL);
    assert(_pair_is_inited(&phmmap_dest->_pair_temp));
    assert(_pair_is_inited(&cphmmap_src->_pair_temp));
    assert(_hash_multimap_same_pair_type_ex(&phmmap_dest->_pair_temp, &cphmmap_src->_pair_temp));

    hash_multimap_clear(phmmap_dest);
    if (!hash_multimap_empty(cphmmap_src)) {
        hash_multimap_insert_range(phmmap_dest, hash_multimap_begin(cphmmap_src), hash_multimap_end(cphmmap_src));
    }
}
Exemple #4
0
/**
 * Initialize hash_multimap container with hash_multimap.
 */
void hash_multimap_init_copy(hash_multimap_t* phmmap_dest, const hash_multimap_t* cphmmap_src)
{
    assert(phmmap_dest != NULL);
    assert(cphmmap_src != NULL);
    assert(_pair_is_created(&phmmap_dest->_pair_temp));
    assert(_pair_is_inited(&cphmmap_src->_pair_temp));

    hash_multimap_init_ex(phmmap_dest, hash_multimap_bucket_count(cphmmap_src), hash_multimap_hash(cphmmap_src), hash_multimap_key_comp(cphmmap_src));
    phmmap_dest->_bfun_keycompare = cphmmap_src->_bfun_keycompare;
    phmmap_dest->_bfun_valuecompare = cphmmap_src->_bfun_valuecompare;
    phmmap_dest->_pair_temp._bfun_mapkeycompare = cphmmap_src->_pair_temp._bfun_mapkeycompare;
    phmmap_dest->_pair_temp._bfun_mapvaluecompare = cphmmap_src->_pair_temp._bfun_mapvaluecompare;
    assert(_hash_multimap_same_pair_type_ex(&phmmap_dest->_pair_temp, &cphmmap_src->_pair_temp));

    if (!hash_multimap_empty(cphmmap_src)) {
        hash_multimap_insert_range(phmmap_dest, hash_multimap_begin(cphmmap_src), hash_multimap_end(cphmmap_src));
    }
}
/**
 * hash_multimap key compare and value compare
 */
void _hash_multimap_value_compare(const void* cpv_first, const void* cpv_second, void* pv_output)
{
    pair_t* ppair_first = NULL;
    pair_t* ppair_second = NULL;

    assert(cpv_first != NULL);
    assert(cpv_second != NULL);
    assert(pv_output != NULL);

    ppair_first = (pair_t*)cpv_first;
    ppair_second = (pair_t*)cpv_second;

    assert(_hash_multimap_same_pair_type_ex(ppair_first, ppair_second));

    *(bool_t*)pv_output = ppair_first->_t_typeinfofirst._pt_type->_t_typesize;
    if (ppair_first->_bfun_mapkeycompare != NULL) {
        ppair_first->_bfun_mapkeycompare(pair_first(ppair_first), pair_first(ppair_second), pv_output);
    } else {
        ppair_first->_t_typeinfofirst._pt_type->_t_typeless(ppair_first->_pv_first, ppair_second->_pv_first, pv_output);
    }
}
/**
 * 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);

    _GET_CONTAINER(it_iter) = phmmap_map;
    _GET_HASH_MULTIMAP_CONTAINER_TYPE(it_iter) = _HASH_MULTIMAP_CONTAINER;
    _GET_HASH_MULTIMAP_ITERATOR_TYPE(it_iter) = _BIDIRECTIONAL_ITERATOR;

    return it_iter;
}