diff --git a/src/TNL/Containers/Expressions/ExpressionTemplates.h b/src/TNL/Containers/Expressions/ExpressionTemplates.h index e36c21a738a82c36c1e2fa831e2e18d74c94c855..8b82f5422076385f117e9b9f00136614861552dd 100644 --- a/src/TNL/Containers/Expressions/ExpressionTemplates.h +++ b/src/TNL/Containers/Expressions/ExpressionTemplates.h @@ -323,6 +323,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T Containers::Expressions::Addition >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Addition > +operator + ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Addition >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Addition > +operator + ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Addition >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -429,6 +459,36 @@ operator - ( const typename Containers::Expressions::BinaryExpressionTemplate< T Containers::Expressions::Subtraction >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Subtraction > +operator - ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Subtraction >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Subtraction > +operator - ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Subtraction >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -535,6 +595,36 @@ operator * ( const typename Containers::Expressions::BinaryExpressionTemplate< T Containers::Expressions::Multiplication >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Multiplication > +operator * ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Multiplication >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Multiplication > +operator * ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Multiplication >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -641,6 +731,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T Containers::Expressions::Division >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Division > +operator / ( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Division >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Division > +operator / ( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Division >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -739,8 +859,8 @@ const Containers::Expressions::BinaryExpressionTemplate< typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType, Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >, Containers::Expressions::Min > -operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType& a, - const Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >& b ) +min( const typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType& a, + const Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >& b ) { return Containers::Expressions::BinaryExpressionTemplate< typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType, @@ -748,6 +868,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T Containers::Expressions::Min >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Min > +min( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Min >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Min > +min( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Min >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -854,6 +1004,36 @@ operator + ( const typename Containers::Expressions::BinaryExpressionTemplate< T Containers::Expressions::Max >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Max > +max( const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Max >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Max > +max( const typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::UnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::BinaryExpressionTemplate< + typename Containers::Expressions::UnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::UnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Max >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, diff --git a/src/TNL/Containers/Expressions/StaticExpressionTemplates.h b/src/TNL/Containers/Expressions/StaticExpressionTemplates.h index 70478ca6d6420d74fbd3820551d99c4120ffcf5c..6ecb1fef118e022a70c2e4739f50b673e31f26b9 100644 --- a/src/TNL/Containers/Expressions/StaticExpressionTemplates.h +++ b/src/TNL/Containers/Expressions/StaticExpressionTemplates.h @@ -363,6 +363,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl Containers::Expressions::Addition >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Addition > +operator + ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Addition >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Addition > +operator + ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Addition >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -469,6 +499,36 @@ operator - ( const typename Containers::Expressions::StaticBinaryExpressionTempl Containers::Expressions::Subtraction >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Subtraction > +operator - ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Subtraction >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Subtraction > +operator - ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Subtraction >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -575,6 +635,36 @@ operator * ( const typename Containers::Expressions::StaticBinaryExpressionTempl Containers::Expressions::Multiplication >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Multiplication > +operator * ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Multiplication >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Multiplication > +operator * ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Multiplication >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -681,6 +771,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl Containers::Expressions::Division >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Division > +operator / ( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Division >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Division > +operator / ( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Division >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -779,8 +899,8 @@ const Containers::Expressions::StaticBinaryExpressionTemplate< typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType, Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >, Containers::Expressions::Min > -operator + ( const typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType& a, - const Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >& b ) +min( const typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType& a, + const Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >& b ) { return Containers::Expressions::StaticBinaryExpressionTemplate< typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType, @@ -788,6 +908,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl Containers::Expressions::Min >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Min > +min( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Min >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Min > +min( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Min >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, @@ -894,6 +1044,36 @@ operator + ( const typename Containers::Expressions::StaticBinaryExpressionTempl Containers::Expressions::Max >( a, b ); } +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Max > +max( const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& a, + const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::Max >( a, b ); +} + +template< typename T1, + template< typename > class Operation > +const Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Max > +max( const typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType& a, + const Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >& b ) +{ + return Containers::Expressions::StaticBinaryExpressionTemplate< + typename Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >::RealType, + Containers::Expressions::StaticUnaryExpressionTemplate< T1, Operation >, + Containers::Expressions::Max >( a, b ); +} + template< typename L1, template< typename > class LOperation, typename R1, diff --git a/src/TNL/Containers/StaticVectorExpressions.h b/src/TNL/Containers/StaticVectorExpressions.h index e5c5a4900c9c39ee9e2ff18920ff3ceb28b727de..99568552402d3989deb6b6267780b82835783de7 100644 --- a/src/TNL/Containers/StaticVectorExpressions.h +++ b/src/TNL/Containers/StaticVectorExpressions.h @@ -630,6 +630,32 @@ auto operator,( const Containers::StaticVector< Size, Real1 >& a, const Containe return TNL::sum( a * b ); } +//// +// Dot product - the same as scalar product, just for convenience +template< int Size, typename Real, typename ET > +__cuda_callable__ +auto dot( const Containers::StaticVector< Size, Real >& a, const ET& b ) +->decltype( TNL::sum( a * b ) ) +{ + return TNL::sum( a * b ); +} + +template< typename ET, int Size, typename Real > +__cuda_callable__ +auto dot( const ET& a, const Containers::StaticVector< Size, Real >& b ) +->decltype( TNL::sum( a * b ) ) +{ + return TNL::sum( a * b ); +} + +template< typename Real1, int Size, typename Real2 > +__cuda_callable__ +auto dot( const Containers::StaticVector< Size, Real1 >& a, const Containers::StaticVector< Size, Real2 >& b ) +->decltype( TNL::sum( a * b ) ) +{ + return TNL::sum( a * b ); +} + //// // TODO: Replace this with multiplication when its safe template< int Size, typename Real, typename ET > diff --git a/src/TNL/Containers/VectorViewExpressions.h b/src/TNL/Containers/VectorViewExpressions.h index e1aaeaac6091f13e71f98b799362533bae1cb7a1..ac32f81cf553427fedcc2cd3d3ee04c3bda77cd0 100644 --- a/src/TNL/Containers/VectorViewExpressions.h +++ b/src/TNL/Containers/VectorViewExpressions.h @@ -582,6 +582,27 @@ auto operator,( const Containers::VectorView< Real1, Device, Index >& a, const C return TNL::sum( a * b ); } +//// +// Dot product - the same as scalar product, just for convenience +template< typename Real, typename Device, typename Index, typename ET > +Real dot( const Containers::VectorView< Real, Device, Index >& a, const ET& b ) +{ + return TNL::sum( a * b ); +} + +template< typename ET, typename Real, typename Device, typename Index > +Real dot( const ET& a, const Containers::VectorView< Real, Device, Index >& b ) +{ + return TNL::sum( a * b ); +} + +template< typename Real1, typename Real2, typename Device, typename Index > +auto dot( const Containers::VectorView< Real1, Device, Index >& a, const Containers::VectorView< Real2, Device, Index >& b ) +->decltype( TNL::sum( a * b ) ) +{ + return TNL::sum( a * b ); +} + //// // TODO: Replace this with multiplication when its safe template< typename Real, typename Device, typename Index, typename ET >