Ranges & containers : is it possible to get a SortedRange from a RedBlackTree ?

Fr via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jul 7 07:51:34 PDT 2014


Hi again,

The solution of making an array from the range works, but I'm 
concerned about the cost of instantiating a (potentially very 
large) array each time I need to walk across the set. Unless 
doing that is costless in D for any reason, it does not seem 
practical in my case.

And when trying to compile the above example I got the following 
error:

Error: template instance std.range.SortedRange!(InputRange!int) 
does not match template declaration SortedRange(Range, alias pred 
= "a < b") if (isRandomAccessRange!Range && hasLength!Range)

I tried to replace SortedRange!InputRange thing with the 
following :

RandomAccessFinite!(InputRange!MyObject) opSlice();

But then I got the folowing error:

Error: template std.range.assumeSorted cannot deduce function 
from argument types !()(InputRange!int), candidates are: [...]

And I must admit that I'm stuck on that...

Beside that I understand that range interfaces like SorteRange 
are not idiomatic at all in D. So I don't mind using something 
else, but I can't see how a could make an "abstract" range from a 
RedBlackTree.Range struct.

I wouldn't mind encapsulating it in another struct or class I 
would define myself, but it seems I cannot access the 
RedBlackTree.Range struct from outside... For exemple with:

RedBlackTree.Range rbtRange = this.sequence[];

I get:

Error: identifier 'Range' of 'RedBlackTree.Range' is not defined

Or is it a syntax-related problem ?

Thanks again for your help !
Fred


More information about the Digitalmars-d-learn mailing list