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