/** * Calculate the distance between two iterators. */ int _basic_string_iterator_minus(basic_string_iterator_t it_first, basic_string_iterator_t it_second) { int n_distance = 0; 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; n_distance = _vector_iterator_minus(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 n_distance; }
/** * Iterator distance. */ int iterator_minus(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, _RANDOM_ACCESS_ITERATOR)); switch (it_first._t_containertype) { case _VECTOR_CONTAINER: return _vector_iterator_minus(it_first, it_second); break; case _DEQUE_CONTAINER: return _deque_iterator_minus(it_first, it_second); break; case _BASIC_STRING_CONTAINER: return _basic_string_iterator_minus(it_first, it_second); break; default: assert(false); return 0; break; } }