std.range.iota enhancement: supporting more types (AKA issue 10762)
H. S. Teoh
hsteoh at quickfur.ath.cx
Fri Dec 27 12:32:03 PST 2013
On Wed, Dec 25, 2013 at 02:30:45PM +0000, Francesco Cattoglio wrote:
> On Wednesday, 25 December 2013 at 10:58:53 UTC, bearophile wrote:
[...]
> >(A less important enhancement is issue 11252).
> On the other hand, I have honestly no idea whatsoever about how to
> implement this
[...]
It should only be supported for numeric types (i.e., that support
+, *, /). Here's a crude attempt at it:
struct Iota(S,T,U) {
S start;
T end;
U step;
... // other stuff here
bool opBinaryRight(string op)(V val)
if (op=="in" &&
is(V.init < S.init) &&
is((V.init - S.init) % U.init) &&
is(T.init >= V.init))
{
if (val < start || val >= end)
return false;
// Surprisingly, x%y actually appears to work
// like fmod(x,y) in D for floating point types!
// Not sure how to represent 0 in a generic way
// though.
return ((val - start) % step == 0);
}
}
T
--
What is Matter, what is Mind? Never Mind, it doesn't Matter.
More information about the Digitalmars-d
mailing list