Standardize base types for metaprogramming
monkyyy
crazymonkyyy at gmail.com
Thu Mar 7 23:05:15 UTC 2024
On Thursday, 29 February 2024 at 21:16:32 UTC, monkyyy wrote:
>
some example code where Id prefer some stable values to be part
of a type interface
```d
auto counter(A...)(A args){
struct Counter(T){
T end=T.max;
T front=T(0);
T step=T(1);
auto pop()=>Counter!T(end,front+step,step);
bool empty()=>end<=front;
auto cap()=>(end-front)/step;
}
//auto args_=args.totuple;
static if(A.length>1){
auto args_=tuple(args[1],args[0],args[2..$]);
} else {
auto args_=tuple(args,int.init);
}
return Counter!(typeof(args_[0]))(args_[0..A.length]);
}
unittest{
auto foo=counter();
assert(foo.front==0);
foo=foo.pop;
assert(foo.front==1);
}
unittest{
auto foo=counter(10);
assert(foo.front==0);
foo=foo.pop;
assert(foo.front==1);
}
unittest{
auto foo=counter(0,10);
assert(foo.front==0);
foo=foo.pop;
assert(foo.front==1);
}
unittest{
auto foo=counter(0,10,2);
assert(foo.front==0);
foo=foo.pop;
assert(foo.front==2);
}
```
More information about the dip.ideas
mailing list