Re: BidirectionalRange switching direction

2015-09-24 Thread Tofu Ninja via Digitalmars-d-learn
On Wednesday, 23 September 2015 at 03:26:29 UTC, John Colvin 
wrote:
On Wednesday, 23 September 2015 at 02:10:22 UTC, Tofu Ninja 
wrote:
Trying to implement a bi directional range and it is slightly 
unclear what the semantics are supposed to be and just wanted 
some clarification.


Are bidirectional ranges supposed to be able to support 
switching direction mid iteration? Like if I do popFront 
popFront popBack should that be equal to just a single 
popFront? Or once you start on a direction should switching be 
considered an error? Or is popFront and popBack supposed to 
consume from both ends of the range and the range is empty 
when they meet?


-tofu


The last one. E.g. for arrays (except narrow strings... ugh)

auto popFront(T)(ref T[] a)
{
a = a[1 .. $];
}

auto popBack(T)(ref T[] a)
{
a = a[0 .. $-1];
}


Ok cool, that's what I ended up doing.


Re: BidirectionalRange switching direction

2015-09-22 Thread John Colvin via Digitalmars-d-learn

On Wednesday, 23 September 2015 at 02:10:22 UTC, Tofu Ninja wrote:
Trying to implement a bi directional range and it is slightly 
unclear what the semantics are supposed to be and just wanted 
some clarification.


Are bidirectional ranges supposed to be able to support 
switching direction mid iteration? Like if I do popFront 
popFront popBack should that be equal to just a single 
popFront? Or once you start on a direction should switching be 
considered an error? Or is popFront and popBack supposed to 
consume from both ends of the range and the range is empty when 
they meet?


-tofu


The last one. E.g. for arrays (except narrow strings... ugh)

auto popFront(T)(ref T[] a)
{
a = a[1 .. $];
}

auto popBack(T)(ref T[] a)
{
a = a[0 .. $-1];
}


BidirectionalRange switching direction

2015-09-22 Thread Tofu Ninja via Digitalmars-d-learn
Trying to implement a bi directional range and it is slightly 
unclear what the semantics are supposed to be and just wanted 
some clarification.


Are bidirectional ranges supposed to be able to support switching 
direction mid iteration? Like if I do popFront popFront popBack 
should that be equal to just a single popFront? Or once you start 
on a direction should switching be considered an error? Or is 
popFront and popBack supposed to consume from both ends of the 
range and the range is empty when they meet?


-tofu