Commit 16d027ec authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Fixing expression templates.

parent a577ef19
Loading
Loading
Loading
Loading
+182 −2
Original line number Diff line number Diff line
@@ -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,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<
@@ -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,
+182 −2
Original line number Diff line number Diff line
@@ -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,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<
@@ -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,
+26 −0
Original line number Diff line number Diff line
@@ -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 >
+21 −0
Original line number Diff line number Diff line
@@ -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 >