コード例 #1
0
/**
 * Initialize pair container with pair.
 */
void pair_init_copy(pair_t* ppair_dest, const pair_t* cppair_src)
{
    bool_t b_result = false;

    assert(ppair_dest != NULL);
    assert(cppair_src != NULL);
    assert(_pair_is_created(ppair_dest));
    assert(_pair_is_inited(cppair_src));
    assert(_pair_same_type(ppair_dest, cppair_src));

    /* initialize dest pair */
    pair_init(ppair_dest);

    /* copy element */
    b_result = _GET_PAIR_FIRST_TYPE_SIZE(ppair_dest);
    _GET_PAIR_FIRST_TYPE_COPY_FUNCTION(ppair_dest)(ppair_dest->_pv_first, cppair_src->_pv_first, &b_result);
    assert(b_result);

    b_result = _GET_PAIR_SECOND_TYPE_SIZE(ppair_dest);
    _GET_PAIR_SECOND_TYPE_COPY_FUNCTION(ppair_dest)(ppair_dest->_pv_second, cppair_src->_pv_second, &b_result);
    assert(b_result);

    ppair_dest->_bfun_mapkeycompare = cppair_src->_bfun_mapkeycompare;
    ppair_dest->_bfun_mapvaluecompare = cppair_src->_bfun_mapvaluecompare;
}
コード例 #2
0
/**
 * Tests if the two pair are equal.
 */
bool_t pair_equal(const pair_t* cppair_first, const pair_t* cppair_second)
{
    bool_t b_less = false;
    bool_t b_greater = false;

    assert(cppair_first != NULL);
    assert(cppair_second != NULL);
    assert(_pair_is_inited(cppair_first));
    assert(_pair_is_inited(cppair_second));
    assert(_pair_same_type(cppair_first, cppair_second));

    if (cppair_first == cppair_second) {
        return true;
    }

    /* compare first */
    b_less = b_greater = _GET_PAIR_FIRST_TYPE_SIZE(cppair_first);
    _GET_PAIR_FIRST_TYPE_LESS_FUNCTION(cppair_first)(cppair_first->_pv_first, cppair_second->_pv_first, &b_less);
    _GET_PAIR_FIRST_TYPE_LESS_FUNCTION(cppair_first)(cppair_second->_pv_first, cppair_first->_pv_first, &b_greater);
    if (b_less || b_greater) {
        return false;
    }

    /* compare second */
    b_less = b_greater = _GET_PAIR_SECOND_TYPE_SIZE(cppair_first);
    _GET_PAIR_SECOND_TYPE_LESS_FUNCTION(cppair_first)(cppair_first->_pv_second, cppair_second->_pv_second, &b_less);
    _GET_PAIR_SECOND_TYPE_LESS_FUNCTION(cppair_first)(cppair_second->_pv_second, cppair_first->_pv_second, &b_greater);
    if (b_less || b_greater) {
        return false;
    }

    return true;
}
コード例 #3
0
ファイル: cstl_pair_private.c プロジェクト: cffyh/libcstl
/**
 * Destroy pair container auxiliary function.
 */
void _pair_destroy_auxiliary(pair_t* ppair_pair)
{
    assert(ppair_pair != NULL);
    assert(_pair_is_inited(ppair_pair) || _pair_is_created(ppair_pair));

    if (ppair_pair->_pv_first != NULL && ppair_pair->_pv_second != NULL) {
        bool_t b_result = false;

        /* destroy first */
        b_result = _GET_PAIR_FIRST_TYPE_SIZE(ppair_pair);
        _GET_PAIR_FIRST_TYPE_DESTROY_FUNCTION(ppair_pair)(ppair_pair->_pv_first, &b_result);
        assert(b_result);
        free(ppair_pair->_pv_first);
        ppair_pair->_pv_first = NULL;

        /* destroy second */
        b_result = _GET_PAIR_SECOND_TYPE_SIZE(ppair_pair);
        _GET_PAIR_SECOND_TYPE_DESTROY_FUNCTION(ppair_pair)(ppair_pair->_pv_second, &b_result);
        assert(b_result);
        free(ppair_pair->_pv_second);
        ppair_pair->_pv_second = NULL;
    }

    ppair_pair->_bfun_mapkeycompare = NULL;
    ppair_pair->_bfun_mapvaluecompare = NULL;
}
コード例 #4
0
/**
 * Initialize pair container.
 */
void pair_init(pair_t* ppair_pair)
{
    assert(ppair_pair != NULL);
    assert(_pair_is_created(ppair_pair));

    if ((ppair_pair->_pv_first = malloc(_GET_PAIR_FIRST_TYPE_SIZE(ppair_pair))) == NULL) {
        fprintf(stderr, "CSTL FATAL ERROR: memory allocation error!\n");
        exit(EXIT_FAILURE);
    } else {
        memset(ppair_pair->_pv_first, 0x00, _GET_PAIR_FIRST_TYPE_SIZE(ppair_pair));
    }

    if ((ppair_pair->_pv_second = malloc(_GET_PAIR_SECOND_TYPE_SIZE(ppair_pair))) == NULL) {
        fprintf(stderr, "CSTL FATAL ERROR: memory allocation error!\n");
        exit(EXIT_FAILURE);
    } else {
        memset(ppair_pair->_pv_second, 0x00, _GET_PAIR_SECOND_TYPE_SIZE(ppair_pair));
    }

    /* initialize new elements */
    if (_GET_PAIR_FIRST_TYPE_STYLE(ppair_pair) == _TYPE_CSTL_BUILTIN) {
        /* get element type name */
        char s_elemtypename[_TYPE_NAME_SIZE + 1];
        _type_get_elem_typename(_GET_PAIR_FIRST_TYPE_NAME(ppair_pair), s_elemtypename);
        _GET_PAIR_FIRST_TYPE_INIT_FUNCTION(ppair_pair)(ppair_pair->_pv_first, s_elemtypename);
    } else {
        bool_t b_result = _GET_PAIR_FIRST_TYPE_SIZE(ppair_pair);
        _GET_PAIR_FIRST_TYPE_INIT_FUNCTION(ppair_pair)(ppair_pair->_pv_first, &b_result);
        assert(b_result);
    }

    if (_GET_PAIR_SECOND_TYPE_STYLE(ppair_pair) == _TYPE_CSTL_BUILTIN) {
        /* get element type name */
        char s_elemtypename[_TYPE_NAME_SIZE + 1];
        _type_get_elem_typename(_GET_PAIR_SECOND_TYPE_NAME(ppair_pair), s_elemtypename);
        _GET_PAIR_SECOND_TYPE_INIT_FUNCTION(ppair_pair)(ppair_pair->_pv_second, s_elemtypename);
    } else {
        bool_t b_result = _GET_PAIR_SECOND_TYPE_SIZE(ppair_pair);
        _GET_PAIR_SECOND_TYPE_INIT_FUNCTION(ppair_pair)(ppair_pair->_pv_second, &b_result);
        assert(b_result);
    }
}