/** * 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; }