RFC on range design for D2

Sean Kelly sean at invisibleduck.org
Wed Sep 10 16:51:11 PDT 2008


Sergey Gromov wrote:
> Sean Kelly <sean at invisibleduck.org> wrote:
>> 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.
> 
> Of course there should be return statements, thank you.  I've never 
> tested this code (obviously), just've thrown it together, so there ought 
> to be stupid mistakes like this.
> 
> As to the destination size.  This is merge sort.  The size of 
> destination buffer must be the sum of the sizes of source buffers.  As 
> soon as one of the source buffers is empty, i.e. completely moved to the 
> destination, there must be place exactly for what left in another source 
> buffer.  If this condition doesn't hold then the arguments weren't 
> correct in the first place.

Oops, of course.


Sean


More information about the Digitalmars-d-announce mailing list