Creating a Sub-view of a non - RA (hasSlicing) range.

monarch_dodra monarch_dodra at gmail.com
Sat Jun 30 06:12:50 PDT 2012


On Saturday, 30 June 2012 at 12:27:38 UTC, bearophile wrote:
> Tobias Pankrath:
>
>> But I would generally avoid SList.
>
> It's not good.
>
> And in general linked lists are quite overrated.
> ...
> Bye,
> bearophile

I appreciate the input, which I (mostly) agree with (I still love 
list's splice ability, which can be very powerful), but this 
isn't really what the question is about.

It's about getting generic algorithms to work with any generic 
range. Right now, they appear (to me) to heavily favor RA, even 
when they should theoretically support simple bidirectionality...

Those that do support directionality do it using "cheat" using 
take. For example:

void main()
{
   SList!int slist;
   foreach(i; iota(5,0,-1))
     slist.insertFront(i);

   auto rnge = slist[];
   auto fs = findSplit!("a == b")(rnge, [3]);

   writeln(fs[0]); // [1, 2]
   slist.insertAfter(take(rnge, 1), 25); //insert 25 between [1, 2]
   writeln(fs[0]); // [1, 25] !?  Should arguably be [1, 25, 2]
}

This, arguably, is not normal behavior. SList modeling forward 
ranges, ranges to the list should not be bounded by a fixed size.

And again, had my input been a BDList (if it existed), findSplit 
would have returned 3 forwardRanges, which is also arguably wrong.


More information about the Digitalmars-d mailing list