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

"Frédérik" via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Jul 7 05:06:20 PDT 2014


Hi all,

I'm discovering the D language that seems very nice in many
aspects, but I'm quite confused by the container and range APIs
while trying to design a very simple interface-oriented API.

Especially I can't figure out how std.containers can connect
properly with std.ranges :

I'm trying to achieve something like that (approximate D code):

interface MyObjectSet
{
      void add(MyObject o);
      void SortedRange!MyObject opSlice();
}

class SomeRedBlackBasedImplementation
{
      private RedBlackTree!MyObject sequence = new
RedBlackTree!MyObject();

      void add(MyObject o) { this.sequence.insert(o); }
      void SortedRange!MyObject opSlice() { XXXX? }
}


I would need to get the range that comes from the red black tree
(as returned by this.sequence[]) but I can't figure out how to
map it to a generic interface like SortedRange that would be
suitable to write a clean interface above.

It seems to me that the Range used by RedBlackTree is a kind of
private struct that does not implement an interface but just
complies with some implicit contract about range properties. Am I
right ? If so how is it possible to make it fit in a more generic
framework ?

Thank you all for your help

Best regards,
Fred



More information about the Digitalmars-d-learn mailing list