default void swap(
		final int start, final int end,
		final MSeq<T> other, final int otherStart
	) {
		if (otherStart < 0 || (otherStart + (end - start)) > length()) {
			throw new ArrayIndexOutOfBoundsException(format(
				"Invalid index range: [%d, %d)",
				otherStart, otherStart + (end - start)
			));
		}

		if (start < end) {
			for (int i = end - start; --i >= 0;) {
				final T temp = get(start + i);
				set(start + i, other.get(otherStart + i));
				other.set(otherStart + i, temp);
			}
		}
	}
Swap a given range with a range of the same size with another array.

<pre>
           start                end
             |                   |
this:  +---+---+---+---+---+---+---+---+---+---+---+---+
             +---------------+
                         +---------------+
other: +---+---+---+---+---+---+---+---+---+---+---+---+
                         |
                     otherStart
</pre>

@param start the start index of {@code this} range, inclusively.
@param end the end index of {@code this} range, exclusively.
@param other the other array to swap the elements with.
@param otherStart the start index of the {@code other} array.
@throws IndexOutOfBoundsException if {@code start > end} or
        if {@code start < 0 || end >= this.length() || otherStart < 0 ||
        otherStart + (end - start) >= other.length()}
jenetics/src/main/java/io/jenetics/util/MSeq.java