예제 #1
0
/**
 * Get the pointer that point to the iterator reference data, but ignore char*.
 */
const void* _vector_iterator_get_pointer_ignore_cstr(vector_iterator_t it_iter)
{
    assert(_vector_iterator_belong_to_vector(_VECTOR_ITERATOR_CONTAINER(it_iter), it_iter));
    assert(!_vector_iterator_equal(it_iter, vector_end(_VECTOR_ITERATOR_CONTAINER(it_iter))));

    return _VECTOR_ITERATOR_COREPOS(it_iter);
}
예제 #2
0
void test__vector_iterator_equal__different_iterator_type(void** state)
{
    vector_iterator_t it_first = _create_vector_iterator();
    vector_iterator_t it_second = _create_vector_iterator();

    it_first._t_iteratortype = _INPUT_ITERATOR;

    expect_assert_failure(_vector_iterator_equal(it_first, it_second));
}
예제 #3
0
void test__vector_iterator_equal__different_container_type(void** state)
{
    vector_iterator_t it_first = _create_vector_iterator();
    vector_iterator_t it_second = _create_vector_iterator();

    it_first._t_containertype = _LIST_CONTAINER;

    expect_assert_failure(_vector_iterator_equal(it_first, it_second));
}
예제 #4
0
/**
 * Get the pointer that point to the iterator reference data.
 */
const void* _vector_iterator_get_pointer(vector_iterator_t it_iter)
{
    assert(_vector_iterator_belong_to_vector(_VECTOR_ITERATOR_CONTAINER(it_iter), it_iter));
    assert(!_vector_iterator_equal(it_iter, vector_end(_VECTOR_ITERATOR_CONTAINER(it_iter))));

    /* char* */
    if (strncmp(_GET_VECTOR_TYPE_BASENAME(_VECTOR_ITERATOR_CONTAINER(it_iter)), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0) {
        return string_c_str((string_t*)_VECTOR_ITERATOR_COREPOS(it_iter));
    } else {
        return _VECTOR_ITERATOR_COREPOS(it_iter);
    }
}
예제 #5
0
/**
 * Test two iterator are equal or not.
 */
bool_t iterator_equal(iterator_t it_first, iterator_t it_second)
{
    assert(_iterator_is_valid(it_first));
    assert(_iterator_is_valid(it_second));
    assert(_iterator_limit_type(it_first, _INPUT_ITERATOR));
    assert(_iterator_limit_type(it_second, _INPUT_ITERATOR));

    if (it_first._t_containertype != it_second._t_containertype) {
        return false;
    }

    switch (it_first._t_containertype) {
        case _VECTOR_CONTAINER:
            return _vector_iterator_equal(it_first, it_second);
            break;
        case _LIST_CONTAINER:
            return _list_iterator_equal(it_first, it_second);
            break;
        case _DEQUE_CONTAINER:
            return _deque_iterator_equal(it_first, it_second);
            break;
						/*
        case _SLIST_CONTAINER:
            return _slist_iterator_equal(it_first, it_second);
            break;
						*/
        case _SET_CONTAINER:
            return _set_iterator_equal(it_first, it_second);
            break;
        case _MAP_CONTAINER:
            return _map_iterator_equal(it_first, it_second);
            break;
        case _HASH_SET_CONTAINER:
            return _hash_set_iterator_equal(it_first, it_second);
            break;
        case _HASH_MAP_CONTAINER:
            return _hash_map_iterator_equal(it_first, it_second);
            break;
        case _BASIC_STRING_CONTAINER:
            return _basic_string_iterator_equal(it_first, it_second);
            break;
        default:
            assert(false);
            return false;
            break;
    }
}
/**
 * Compare two iterators for equality.
 */
bool_t _basic_string_iterator_equal(basic_string_iterator_t it_first, basic_string_iterator_t it_second)
{
    bool_t b_result;

    assert(_GET_BASIC_STRING_CONTAINER_TYPE(it_first) == _BASIC_STRING_CONTAINER);
    assert(_GET_BASIC_STRING_CONTAINER_TYPE(it_second) == _BASIC_STRING_CONTAINER);

    _GET_VECTOR_CONTAINER_TYPE(it_first) = _VECTOR_CONTAINER;
    _GET_VECTOR_CONTAINER_TYPE(it_second) = _VECTOR_CONTAINER;

    b_result = _vector_iterator_equal(it_first, it_second);

    _GET_BASIC_STRING_CONTAINER_TYPE(it_first) = _BASIC_STRING_CONTAINER;
    _GET_BASIC_STRING_CONTAINER_TYPE(it_second) = _BASIC_STRING_CONTAINER;

    return b_result;
}
예제 #7
0
/**
 * Set iterator reference data.
 */
void _vector_iterator_set_value(vector_iterator_t it_iter, const void* cpv_value)
{
    bool_t b_result = false;

    assert(cpv_value != NULL);
    assert(_vector_iterator_belong_to_vector(_VECTOR_ITERATOR_CONTAINER(it_iter), it_iter));
    assert(!_vector_iterator_equal(it_iter, vector_end(_VECTOR_ITERATOR_CONTAINER(it_iter))));

    /* char* */
    if (strncmp(_GET_VECTOR_TYPE_BASENAME(_VECTOR_ITERATOR_CONTAINER(it_iter)), _C_STRING_TYPE, _TYPE_NAME_SIZE) == 0) {
        string_assign_cstr((string_t*)_VECTOR_ITERATOR_COREPOS(it_iter), (char*)cpv_value);
    } else {
        b_result = _GET_VECTOR_TYPE_SIZE(_VECTOR_ITERATOR_CONTAINER(it_iter));
        _GET_VECTOR_TYPE_COPY_FUNCTION(_VECTOR_ITERATOR_CONTAINER(it_iter))(_VECTOR_ITERATOR_COREPOS(it_iter), cpv_value, &b_result);
        assert(b_result);
    }
}