On Saturday, 8 March 2014 at 02:15:19 UTC, Adam D. Ruppe wrote:
I guess the whole yield thing can be kinda nice, I'm just not
sure it is that big of a win given its other limitations
compared to full ranges.
I slapped this together to see if we can do it with a mixin
template:
http://arsdnet.net/dcode/next.d
struct ShortRange {
int next() {
switch(callNumber) {
case 0: return 50;
case 1: return 60;
case 2: return 70;
case 3: return finished();
default: assert(0);
}
}
mixin MakeShortRange!();
}
Wordier than
yield ShortRange() { yield 50; yield 60; yield 70; }
but the same idea. (In fact, i'm sure the whole yield thing
should pretty much just rewrite into something like this anyway).
My hypothetical from the previous post would be written:
struct ShortRange {
Result result;
this(string s) {
result = c_query(s);
}
Row next() {
if(!HasRow(result))
return finished();
return GetNextRow(result);
}
mixin MakeShortRange!();
}
Which is a bit shorter and perhaps nicer to use than the long
form range.