commit 9659c6d9e677113b74112e40012a8526122ce240
parent a2f50e4da69ed8acbcbd7383b6bcf043b42d1f48
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date: Sat, 27 Aug 2016 00:04:57 +0300
New implementation of counter functions
Diffstat:
1 file changed, 4 insertions(+), 18 deletions(-)
diff --git a/include/kfr/base/basic_expressions.hpp b/include/kfr/base/basic_expressions.hpp
@@ -88,32 +88,18 @@ CMT_INLINE auto ones()
}
CMT_INLINE auto counter()
{
- return lambda([](cinput_t, size_t index, auto x) {
- using T = subtype<decltype(x)>;
- using Tsub = subtype<T>;
- using TI = subtype<itype<T>>;
- return cast<T>(enumerate<Tsub, x.size()>() + cast<Tsub>(cast<TI>(index)));
- });
+ return lambda([](cinput_t, size_t index, auto x) { return enumerate(x) + index; });
}
template <typename T1>
CMT_INLINE auto counter(T1 start)
{
- return lambda([start](cinput_t, size_t index, auto x) {
- using T = subtype<decltype(x)>;
- using Tsub = subtype<T>;
- using TI = subtype<itype<T>>;
- return cast<T>(enumerate<Tsub, x.size()>() + cast<Tsub>(start) + cast<Tsub>(cast<TI>(index)));
- });
+ return lambda([start](cinput_t, size_t index, auto x) { return enumerate(x) + index + start; });
}
template <typename T1, typename T2>
CMT_INLINE auto counter(T1 start, T2 step)
{
- return lambda([start, step](cinput_t, size_t index, auto x) {
- using T = subtype<decltype(x)>;
- using Tsub = subtype<T>;
- using TI = subtype<itype<T>>;
- return cast<T>(enumerate<Tsub, x.size()>() * step + cast<Tsub>(start) + cast<Tsub>(cast<TI>(index)));
- });
+ return lambda(
+ [start, step](cinput_t, size_t index, auto x) { return (enumerate(x) + index) * step + start; });
}
template <typename Gen>