protocol for using InputRanges
w0rp
devw0rp at gmail.com
Sun Mar 23 02:26:51 PDT 2014
I understand it like this.
* empty - Are there no more values?
* front - Get me the current value.
* popFront - Advance to the next value.
In terms of how I implement an InputRange in general, I typically
end up with this.
* empty - Advance and cache "current value," return true if we
ran out of values.
* front - enforce(!empty), which in turn caches the current
value, which we then return.
* popFront - enforce(!empty), clear the cached value so we can
later advance.
So .front gives you the same thing again and again until you call
popFront, you could indeed call .front before .empty, but you may
get an exception. This obviously isn't how I implement all
InputRanges, as there are better ways to write other ranges, such
as ranges which operate on sets of integers or wrap arrays. This
is just my last resort general case InputRange implementation.
.front assignment obviously replaces the cached value.
More information about the Digitalmars-d
mailing list