Shout out to D at cppcon, when talkign about ranges.

Kagamin via Digitalmars-d digitalmars-d at puremagic.com
Thu Oct 8 07:36:01 PDT 2015


On Thursday, 8 October 2015 at 13:10:24 UTC, John Colvin wrote:
> What you're effectively describing is a trio of iterators 
> wrapped to give an interface of two linked ranges. popFront 
> grows the first one and shrinks the second. I'd be interested 
> to see how to construct that, given a generic range as input.

The C++ example doesn't work with generic iterators, it needs a 
specific ability to iterate in both directions, hence a 
bidirectional range.

The way ranges are used for iteration, they can be seen as 
adapters for iterators providing various consistent interfaces 
depending on their capabilities. In this example we need a 
bidirectional range that can go back and forth, one way to do it 
is to provide undo mechanism like undoPopFront and frontUndoEmpty 
to allow the range grow back, thus remaining a range that is a 
list of items and not an iterator. Another way is to provide a 
reverse range of previously popped items - this can be seen as 
iterator or not, more like a range with history rather than an 
undoable input range, so maybe the getter should be `history`.


More information about the Digitalmars-d mailing list