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