Пример #1
0
/**
 * Move iterator to prev n position.
 */
iterator_t iterator_prev_n(iterator_t it_iter, int n_step)
{
    assert(_iterator_is_valid(it_iter));
    assert(_iterator_limit_type(it_iter, _RANDOM_ACCESS_ITERATOR));

    if (n_step == 0) {
        return it_iter;
    }

    switch (it_iter._t_containertype) {
        case _VECTOR_CONTAINER:
            return _vector_iterator_prev_n(it_iter, n_step);
            break;
        case _DEQUE_CONTAINER:
            return _deque_iterator_prev_n(it_iter, n_step);
            break;
        case _BASIC_STRING_CONTAINER:
            return _basic_string_iterator_prev_n(it_iter, n_step);
            break;
        default:
            assert(false);
            return it_iter;
            break;
    }
}
/**
 * Get the iterator that reference previous n data.
 */
basic_string_iterator_t _basic_string_iterator_prev_n(basic_string_iterator_t it_iter, int n_step)
{
    assert(_GET_BASIC_STRING_CONTAINER_TYPE(it_iter) == _BASIC_STRING_CONTAINER);

    _GET_VECTOR_CONTAINER_TYPE(it_iter) = _VECTOR_CONTAINER;

    it_iter = _vector_iterator_prev_n(it_iter, n_step);

    _GET_BASIC_STRING_CONTAINER_TYPE(it_iter) = _BASIC_STRING_CONTAINER;

    return it_iter;
}