Nice work!
Implementation is at http://dpaste.dzfl.pl/a0effbaee0a9. For
historical reasons I've reused an undocumented function
sameHead.
sameHead is documented. I already use it a couple of times.
The algorithm assumes that "right" is a subrange of "whole"
sitting at its tail, ...
sameTail is also in the Phobos docs. overlap is not documented.
A couple of times writing contracts, I missed something like:
bool sliceOf(T)(in T[] whole, in T[] slice)
{
return whole.ptr <= slice.ptr &&
whole.ptr + slice.length <= whole.ptr + slice.length;
}
The alternative using overlap:
overlap(whole, slice) is slice
is a little bit too expensive for my use case.