some operation utilities
This commit is contained in:
parent
7735a1f9fb
commit
5c4f0c3f1b
1 changed files with 65 additions and 0 deletions
|
@ -306,6 +306,71 @@ namespace MultiArrayTools
|
|||
return Operation<typename OpFunction::value_type,OpFunction,Ops...>(ops...);
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator+(const T& a, const OperationBase<T,OperationClass>& b)
|
||||
-> Operation<T,plus<T>,OperationValue<T>,OperationClass>
|
||||
{
|
||||
OperationValue<T> v(a);
|
||||
return Operation<T,plus<T>,OperationValue<T>,OperationClass>(v, b.THIS());
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator-(const T& a, const OperationBase<T,OperationClass>& b)
|
||||
-> Operation<T,minus<T>,OperationValue<T>,OperationClass>
|
||||
{
|
||||
OperationValue<T> v(a);
|
||||
return Operation<T,minus<T>,OperationValue<T>,OperationClass>(v, b.THIS());
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator*(const T& a, const OperationBase<T,OperationClass>& b)
|
||||
-> Operation<T,multiplies<T>,OperationValue<T>,OperationClass>
|
||||
{
|
||||
OperationValue<T> v(a);
|
||||
return Operation<T,multiplies<T>,OperationValue<T>,OperationClass>(v, b.THIS());
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator/(const T& a, const OperationBase<T,OperationClass>& b)
|
||||
-> Operation<T,divides<T>,OperationValue<T>,OperationClass>
|
||||
{
|
||||
OperationValue<T> v(a);
|
||||
return Operation<T,divides<T>,OperationValue<T>,OperationClass>(v, b.THIS());
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator+(const OperationBase<T,OperationClass>& a, const T& b)
|
||||
-> Operation<T,plus<T>,OperationClass,OperationValue<T> >
|
||||
{
|
||||
OperationValue<T> v(b);
|
||||
return Operation<T,plus<T>,OperationClass,OperationValue<T> >(a.THIS(), v);
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator-(const OperationBase<T,OperationClass>& a, const T& b)
|
||||
-> Operation<T,minus<T>,OperationClass,OperationValue<T> >
|
||||
{
|
||||
OperationValue<T> v(b);
|
||||
return Operation<T,minus<T>,OperationClass,OperationValue<T> >(a.THIS(), v);
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator*(const OperationBase<T,OperationClass>& a, const T& b)
|
||||
-> Operation<T,multiplies<T>,OperationClass,OperationValue<T> >
|
||||
{
|
||||
OperationValue<T> v(b);
|
||||
return Operation<T,multiplies<T>,OperationClass,OperationValue<T> >(a.THIS(), v);
|
||||
}
|
||||
|
||||
template <typename T, class OperationClass>
|
||||
auto operator/(const OperationBase<T,OperationClass>& a, const T& b)
|
||||
-> Operation<T,divides<T>,OperationClass,OperationValue<T> >
|
||||
{
|
||||
OperationValue<T> v(b);
|
||||
return Operation<T,divides<T>,OperationClass,OperationValue<T> >(a.THIS(), v);
|
||||
}
|
||||
|
||||
|
||||
template <typename T, class Op, class IndexType>
|
||||
class Contraction : public OperationTemplate<T,Contraction<T,Op,IndexType> >
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue