arithmetric functions -> accumulation
This commit is contained in:
parent
5c96e47f69
commit
ef7760a5b3
1 changed files with 8 additions and 85 deletions
93
src/arith.h
93
src/arith.h
|
@ -8,113 +8,36 @@ namespace MultiArrayHelper
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct plus
|
struct plus
|
||||||
{
|
{
|
||||||
static inline T&& apply(const T& a1, const T& a2)
|
static inline T& acc(T& target, const T& arg)
|
||||||
{
|
{
|
||||||
T&& res = a1 + a2;
|
return target += arg;
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, const T& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 + a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(const T& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 + a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 + a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct minus
|
struct minus
|
||||||
{
|
{
|
||||||
static inline T&& apply(const T& a1, const T& a2)
|
static inline T& acc(T& target, const T& arg)
|
||||||
{
|
{
|
||||||
T&& res = a1 - a2;
|
return target -= arg;
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, const T& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 - a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(const T& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 - a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 - a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct multiplies
|
struct multiplies
|
||||||
{
|
{
|
||||||
static inline T&& apply(const T& a1, const T& a2)
|
static inline T& acc(T& target, const T& arg)
|
||||||
{
|
{
|
||||||
T&& res = a1 * a2;
|
return target *= arg;
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, const T& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 * a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(const T& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 * a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 * a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct divides
|
struct divides
|
||||||
{
|
{
|
||||||
static inline T&& apply(const T& a1, const T& a2)
|
static inline T& acc(T& target, const T& arg)
|
||||||
{
|
{
|
||||||
T&& res = a1 / a2;
|
return target /= arg;
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, const T& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 / a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(const T& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 / a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline T&& apply(T&& a1, T&& a2)
|
|
||||||
{
|
|
||||||
T&& res = a1 / a2;
|
|
||||||
return std::forward<T>( res );
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue