Loading src/TNL/Containers/Expressions/ExpressionTemplates.h +182 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -739,7 +859,7 @@ 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, min( const typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType& a, const Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >& b ) { return Containers::Expressions::BinaryExpressionTemplate< Loading @@ -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, Loading Loading @@ -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, Loading src/TNL/Containers/Expressions/StaticExpressionTemplates.h +182 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -779,7 +899,7 @@ 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, min( const typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType& a, const Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >& b ) { return Containers::Expressions::StaticBinaryExpressionTemplate< Loading @@ -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, Loading Loading @@ -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, Loading src/TNL/Containers/StaticVectorExpressions.h +26 −0 Original line number Diff line number Diff line Loading @@ -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 > Loading src/TNL/Containers/VectorViewExpressions.h +21 −0 Original line number Diff line number Diff line Loading @@ -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 > Loading Loading
src/TNL/Containers/Expressions/ExpressionTemplates.h +182 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -739,7 +859,7 @@ 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, min( const typename Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >::RealType& a, const Containers::Expressions::BinaryExpressionTemplate< T1, T2, Operation >& b ) { return Containers::Expressions::BinaryExpressionTemplate< Loading @@ -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, Loading Loading @@ -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, Loading
src/TNL/Containers/Expressions/StaticExpressionTemplates.h +182 −2 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -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, Loading Loading @@ -779,7 +899,7 @@ 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, min( const typename Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >::RealType& a, const Containers::Expressions::StaticBinaryExpressionTemplate< T1, T2, Operation >& b ) { return Containers::Expressions::StaticBinaryExpressionTemplate< Loading @@ -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, Loading Loading @@ -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, Loading
src/TNL/Containers/StaticVectorExpressions.h +26 −0 Original line number Diff line number Diff line Loading @@ -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 > Loading
src/TNL/Containers/VectorViewExpressions.h +21 −0 Original line number Diff line number Diff line Loading @@ -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 > Loading