pfor/src/pfor/index/op.h

41 lines
1.2 KiB
C++

#ifndef PFOR_PFOR_INDEX_OP_H
#define PFOR_PFOR_INDEX_OP_H
#include <utility>
#define PFOR_INDEX_DEF_OPERATION_UNARY(OPNAME, OPSYM) \
struct OPNAME { \
template<typename Rhs> \
inline static decltype(auto) eval(Rhs&& rhs) { \
return OPSYM std::forward<Rhs>(rhs); \
} \
}
#define PFOR_INDEX_DEF_OPERATION_BINARY(OPNAME, OPSYM) \
struct OPNAME { \
template<typename Lhs, typename Rhs> \
inline static decltype(auto) eval(Lhs&& lhs, Rhs&& rhs) { \
return std::forward<Lhs>(lhs) OPSYM std::forward<Rhs>(rhs); \
} \
}
namespace pfor {
namespace index {
namespace op {
PFOR_INDEX_DEF_OPERATION_UNARY(Minus, -);
PFOR_INDEX_DEF_OPERATION_BINARY(Addition, +);
PFOR_INDEX_DEF_OPERATION_BINARY(Subtraction, -);
PFOR_INDEX_DEF_OPERATION_BINARY(Multiplication, *);
// PFOR_INDEX_DEF_OPERATION_BINARY(Division, /);
}
}
}
#undef PFOR_INDEX_DEF_OPERATION_BINARY
#undef PFOR_INDEX_DEF_OPERATION_UNARY
#endif