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.

Reply via email to