#ifndef __operation_def_h__ #define __operation_def_h__ #include "multi_array_operation.h" namespace MultiArrayTools { template auto operator+(const T& a, const OperationBase& b) -> Operation,OperationValue,OperationClass> { OperationValue v(a); return Operation,OperationValue,OperationClass>(v, b.THIS()); } template auto operator-(const T& a, const OperationBase& b) -> Operation,OperationValue,OperationClass> { OperationValue v(a); return Operation,OperationValue,OperationClass>(v, b.THIS()); } template auto operator*(const T& a, const OperationBase& b) -> Operation,OperationValue,OperationClass> { OperationValue v(a); return Operation,OperationValue,OperationClass>(v, b.THIS()); } template auto operator/(const T& a, const OperationBase& b) -> Operation,OperationValue,OperationClass> { OperationValue v(a); return Operation,OperationValue,OperationClass>(v, b.THIS()); } template auto operator+(const OperationBase& a, const T& b) -> Operation,OperationClass,OperationValue > { OperationValue v(b); return Operation,OperationClass,OperationValue >(a.THIS(), v); } template auto operator-(const OperationBase& a, const T& b) -> Operation,OperationClass,OperationValue > { OperationValue v(b); return Operation,OperationClass,OperationValue >(a.THIS(), v); } template auto operator*(const OperationBase& a, const T& b) -> Operation,OperationClass,OperationValue > { OperationValue v(b); return Operation,OperationClass,OperationValue >(a.THIS(), v); } template auto operator/(const OperationBase& a, const T& b) -> Operation,OperationClass,OperationValue > { OperationValue v(b); return Operation,OperationClass,OperationValue >(a.THIS(), v); } #define regFunc1(fff) template \ auto fff(const OperationBase& a) \ -> Operation,OperationClass> { \ return Operation,OperationClass>(a.THIS()); } #include "extensions/math.h" #undef regFunc1 template auto ipow(const OperationBase& a) -> Operation,OperationClass> { return Operation,OperationClass>(a.THIS()); } } #endif