RFC on range design for D2
Sean Kelly
sean at invisibleduck.org
Wed Sep 10 15:13:58 PDT 2008
Sergey Gromov wrote:
>
> Now the same algorithm in ranges:
>
>> Merge_backward(R1, R2, R3)(R1 s1, R2 s2, R3 dst)
>> {
>> for (;;)
>> {
>> if (s1.isEmpty())
>> dst[] = s2[];
>> else if (s2.isEmpty())
>> dst[] = s1[];
I'm not sure the above is correct. It should return after the copy is
performed, and the code also assumes that the size of dst is equal to
the size of s2 and s1, respectively.
>> else if (s1.last < s2.last)
>> {
>> dst.last = s1.last;
>> s1.shrink();
>> }
>> else
>> {
>> dst.last = s2.last;
>> s2.shrink();
>> }
>> dst.shrink();
>> }
>> }
>
> If there were shrink-on-read and (eureka!) shrink-on-write operations,
> it would be even shorter:
>
>> else if (s1.last < s2.last)
>> dst.putBack(s1.getBack());
>> else
>> dst.putBack(s2.getBack());
>
> where both getBack() and putBack() shrink the range from the end side.
Very slick.
Sean
More information about the Digitalmars-d-announce
mailing list