/** * Move iterator to next n position. */ iterator_t iterator_next_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_next_n(it_iter, n_step); break; case _DEQUE_CONTAINER: return _deque_iterator_next_n(it_iter, n_step); break; case _BASIC_STRING_CONTAINER: return _basic_string_iterator_next_n(it_iter, n_step); break; default: assert(false); return it_iter; break; } }
/** * Get the iterator that reference next n data. */ basic_string_iterator_t _basic_string_iterator_next_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_next_n(it_iter, n_step); _GET_BASIC_STRING_CONTAINER_TYPE(it_iter) = _BASIC_STRING_CONTAINER; return it_iter; }
/** * Access iterator reference data randomly with subscript. */ void* _vector_iterator_at(vector_iterator_t it_iter, int n_index) { it_iter = _vector_iterator_next_n(it_iter, n_index); return (void*)_vector_iterator_get_pointer(it_iter); }