SourceForge Logo Tiny Vector Matrix library using Expression Templates Sourceforge Project Page

include/tvmet/VectorFunctions.h File Reference

#include <tvmet/Extremum.h>

Include dependency graph for VectorFunctions.h:

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Namespaces

namespace  tvmet
namespace  tvmet::element_wise

Defines

#define TVMET_DECLARE_MACRO(NAME)
#define TVMET_DECLARE_MACRO(NAME, POD)
#define TVMET_DECLARE_MACRO(NAME)
#define TVMET_IMPLEMENT_MACRO(NAME)
#define TVMET_IMPLEMENT_MACRO(NAME, POD)
#define TVMET_IMPLEMENT_MACRO(NAME)

Functions

template<class T1, class T2, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< T1, T2 >
, VectorConstReference< T1, Sz >
, VectorConstReference< T2, Sz >
>, Sz > 
tvmet::add (const Vector< T1, Sz > &lhs, const Vector< T2, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< typename E::value_type, T >
, XprVector< E, Sz >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::add (const XprVector< E, Sz > &lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< T, typename E::value_type >
, VectorConstReference< T, Sz >
, XprVector< E, Sz > >, Sz > 
tvmet::add (const Vector< T, Sz > &lhs, const XprVector< E, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T1, class T2, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< T1, T2 >
, VectorConstReference< T1, Sz >
, VectorConstReference< T2, Sz >
>, Sz > 
tvmet::sub (const Vector< T1, Sz > &lhs, const Vector< T2, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< typename E::value_type, T >
, XprVector< E, Sz >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::sub (const XprVector< E, Sz > &lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< T, typename E::value_type >
, VectorConstReference< T, Sz >
, XprVector< E, Sz > >, Sz > 
tvmet::sub (const Vector< T, Sz > &lhs, const XprVector< E, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T1, class T2, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< T1, T2 >
, VectorConstReference< T1, Sz >
, VectorConstReference< T2, Sz >
>, Sz > 
tvmet::mul (const Vector< T1, Sz > &lhs, const Vector< T2, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< typename E::value_type, T >
, XprVector< E, Sz >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::mul (const XprVector< E, Sz > &lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< T, typename E::value_type >
, VectorConstReference< T, Sz >
, XprVector< E, Sz > >, Sz > 
tvmet::mul (const Vector< T, Sz > &lhs, const XprVector< E, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T1, class T2, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< T1, T2 >
, VectorConstReference< T1, Sz >
, VectorConstReference< T2, Sz >
>, Sz > 
tvmet::element_wise::div (const Vector< T1, Sz > &lhs, const Vector< T2, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< typename E::value_type, T >
, XprVector< E, Sz >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::element_wise::div (const XprVector< E, Sz > &lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class E, class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< T, typename E::value_type >
, VectorConstReference< T, Sz >
, XprVector< E, Sz > >, Sz > 
tvmet::element_wise::div (const Vector< T, Sz > &lhs, const XprVector< E, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< T, int >
, VectorConstReference< T, Sz >
, XprLiteral< int > >, Sz > 
tvmet::add (const Vector< T, Sz > &lhs, int rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< int, T >, XprLiteral< int >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::add (int lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< T, int >
, VectorConstReference< T, Sz >
, XprLiteral< int > >, Sz > 
tvmet::sub (const Vector< T, Sz > &lhs, int rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< int, T >, XprLiteral< int >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::sub (int lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< T, int >
, VectorConstReference< T, Sz >
, XprLiteral< int > >, Sz > 
tvmet::mul (const Vector< T, Sz > &lhs, int rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< int, T >, XprLiteral< int >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::mul (int lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< T, int >
, VectorConstReference< T, Sz >
, XprLiteral< int > >, Sz > 
tvmet::div (const Vector< T, Sz > &lhs, int rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< int, T >, XprLiteral< int >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::div (int lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< T, float >
, VectorConstReference< T, Sz >
, XprLiteral< float > >, Sz > 
tvmet::add (const Vector< T, Sz > &lhs, float rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< float, T >, XprLiteral
< float >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::add (float lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< T, float >
, VectorConstReference< T, Sz >
, XprLiteral< float > >, Sz > 
tvmet::sub (const Vector< T, Sz > &lhs, float rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< float, T >, XprLiteral
< float >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::sub (float lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< T, float >
, VectorConstReference< T, Sz >
, XprLiteral< float > >, Sz > 
tvmet::mul (const Vector< T, Sz > &lhs, float rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< float, T >, XprLiteral
< float >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::mul (float lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< T, float >
, VectorConstReference< T, Sz >
, XprLiteral< float > >, Sz > 
tvmet::div (const Vector< T, Sz > &lhs, float rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< float, T >, XprLiteral
< float >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::div (float lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< T, double >
, VectorConstReference< T, Sz >
, XprLiteral< double > >, Sz > 
tvmet::add (const Vector< T, Sz > &lhs, double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< double, T >, XprLiteral
< double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::add (double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< T, double >
, VectorConstReference< T, Sz >
, XprLiteral< double > >, Sz > 
tvmet::sub (const Vector< T, Sz > &lhs, double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< double, T >, XprLiteral
< double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::sub (double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< T, double >
, VectorConstReference< T, Sz >
, XprLiteral< double > >, Sz > 
tvmet::mul (const Vector< T, Sz > &lhs, double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< double, T >, XprLiteral
< double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::mul (double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< T, double >
, VectorConstReference< T, Sz >
, XprLiteral< double > >, Sz > 
tvmet::div (const Vector< T, Sz > &lhs, double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< double, T >, XprLiteral
< double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::div (double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< T, long double >
, VectorConstReference< T, Sz >
, XprLiteral< long double >
>, Sz > 
tvmet::add (const Vector< T, Sz > &lhs, long double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< long double, T >, XprLiteral
< long double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::add (long double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< T, long double >
, VectorConstReference< T, Sz >
, XprLiteral< long double >
>, Sz > 
tvmet::sub (const Vector< T, Sz > &lhs, long double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< long double, T >, XprLiteral
< long double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::sub (long double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< T, long double >
, VectorConstReference< T, Sz >
, XprLiteral< long double >
>, Sz > 
tvmet::mul (const Vector< T, Sz > &lhs, long double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< long double, T >, XprLiteral
< long double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::mul (long double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< T, long double >
, VectorConstReference< T, Sz >
, XprLiteral< long double >
>, Sz > 
tvmet::div (const Vector< T, Sz > &lhs, long double rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< long double, T >, XprLiteral
< long double >
, VectorConstReference< T, Sz >
>, Sz > 
tvmet::div (long double lhs, const Vector< T, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< std::complex< T >
, std::complex< T >
>, VectorConstReference
< std::complex< T >, Sz >
, XprLiteral< std::complex< T >
> >, Sz > 
tvmet::add (const Vector< std::complex< T >, Sz > &lhs, const std::complex< T > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_add
< std::complex< T >
, std::complex< T >
>, XprLiteral< std::complex
< T > >, VectorConstReference
< std::complex< T >, Sz >
>, Sz > 
tvmet::add (const std::complex< T > &lhs, const Vector< std::complex< T >, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< std::complex< T >
, std::complex< T >
>, VectorConstReference
< std::complex< T >, Sz >
, XprLiteral< std::complex< T >
> >, Sz > 
tvmet::sub (const Vector< std::complex< T >, Sz > &lhs, const std::complex< T > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_sub
< std::complex< T >
, std::complex< T >
>, XprLiteral< std::complex
< T > >, VectorConstReference
< std::complex< T >, Sz >
>, Sz > 
tvmet::sub (const std::complex< T > &lhs, const Vector< std::complex< T >, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< std::complex< T >
, std::complex< T >
>, VectorConstReference
< std::complex< T >, Sz >
, XprLiteral< std::complex< T >
> >, Sz > 
tvmet::mul (const Vector< std::complex< T >, Sz > &lhs, const std::complex< T > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_mul
< std::complex< T >
, std::complex< T >
>, XprLiteral< std::complex
< T > >, VectorConstReference
< std::complex< T >, Sz >
>, Sz > 
tvmet::mul (const std::complex< T > &lhs, const Vector< std::complex< T >, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< std::complex< T >
, std::complex< T >
>, VectorConstReference
< std::complex< T >, Sz >
, XprLiteral< std::complex< T >
> >, Sz > 
tvmet::div (const Vector< std::complex< T >, Sz > &lhs, const std::complex< T > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< std::complex< T >
, std::complex< T >
>, XprLiteral< std::complex
< T > >, VectorConstReference
< std::complex< T >, Sz >
>, Sz > 
tvmet::div (const std::complex< T > &lhs, const Vector< std::complex< T >, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
template<class T, std::size_t Sz>
NumericTraits< T >::sum_type tvmet::sum (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 Compute the sum of the vector.
template<class T, std::size_t Sz>
NumericTraits< T >::sum_type tvmet::product (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 Compute the product of the vector elements.
template<class T1, class T2, std::size_t Sz>
PromoteTraits< T1, T2 >::value_type tvmet::dot (const Vector< T1, Sz > &lhs, const Vector< T2, Sz > &rhs) TVMET_CXX_ALWAYS_INLINE
 Compute the dot/inner product

Compute the dot product as:

\[ \sum_{i = 0}^{Sz - 1} ( lhs[i] * rhs[i] ) \]

where lhs is a column vector and rhs is a row vector, both vectors have the same dimension.

template<class T1, class T2>
Vector< typename PromoteTraits
< T1, T2 >::value_type, 3 > 
tvmet::cross (const Vector< T1, 3 > &lhs, const Vector< T2, 3 > &rhs) TVMET_CXX_ALWAYS_INLINE
 Compute the cross/outer product.
template<class T, std::size_t Sz>
NumericTraits< T >::sum_type tvmet::norm1 (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 The $l_1$ norm of a vector v.
template<class T, std::size_t Sz>
NumericTraits< T >::sum_type tvmet::norm2 (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 The euklidian norm (or $l_2$ norm) of a vector v.
template<class T, std::size_t Sz>
XprVector< XprBinOp< Fcnl_div
< T, T >, VectorConstReference
< T, Sz >, XprLiteral< T >
>, Sz > 
tvmet::normalize (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 Normalize the given vector.
template<class E, std::size_t Sz>
Extremum< typename
E::value_type, std::size_t,
vector_tag > 
tvmet::maximum (const XprVector< E, Sz > &e)
 Find the maximum of a vector expression.
template<class T, std::size_t Sz>
Extremum< T, std::size_t,
vector_tag > 
tvmet::maximum (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 Find the maximum of a vector.
template<class E, std::size_t Sz>
Extremum< typename
E::value_type, std::size_t,
vector_tag > 
tvmet::minimum (const XprVector< E, Sz > &e)
 Find the minimum of a vector expression.
template<class T, std::size_t Sz>
Extremum< T, std::size_t,
vector_tag > 
tvmet::minimum (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 Find the minimum of a vector.
template<class E, std::size_t Sz>
E::value_type tvmet::max (const XprVector< E, Sz > &e)
 Find the maximum of a vector expression.
template<class T, std::size_t Sz>
tvmet::max (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 Find the maximum of a vector.
template<class E, std::size_t Sz>
E::value_type tvmet::min (const XprVector< E, Sz > &e)
 Find the minimum of a vector expression.
template<class T, std::size_t Sz>
tvmet::min (const Vector< T, Sz > &v) TVMET_CXX_ALWAYS_INLINE
 Find the minimum of a vector.
template<class T, std::size_t Sz>
XprVector
< VectorConstReference< T, Sz >
, Sz > 
tvmet::cvector_ref (const T *mem) TVMET_CXX_ALWAYS_INLINE
 Creates an expression wrapper for a C like vector arrays.


Define Documentation

#define TVMET_DECLARE_MACRO ( NAME   ) 

Value:

template<class T, std::size_t Sz>         \
XprVector<                \
  XprBinOp<               \
    Fcnl_##NAME< std::complex<T>, std::complex<T> >,      \
    VectorConstReference< std::complex<T>, Sz>,       \
    XprLiteral< std::complex<T> >         \
  >,                  \
  Sz                  \
>                 \
NAME (const Vector<std::complex<T>, Sz>& lhs,       \
      const std::complex<T>& rhs) TVMET_CXX_ALWAYS_INLINE;    \
                  \
template<class T, std::size_t Sz>         \
XprVector<                \
  XprBinOp<               \
    Fcnl_##NAME< std::complex<T>, std::complex<T> >,      \
    XprLiteral< std::complex<T> >,          \
    VectorConstReference< std::complex<T>, Sz>        \
  >,                  \
  Sz                  \
>                 \
NAME (const std::complex<T>& lhs,         \
      const Vector< std::complex<T>, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;

#define TVMET_DECLARE_MACRO ( NAME,
POD   ) 

Value:

template<class T, std::size_t Sz>       \
XprVector<              \
  XprBinOp<             \
    Fcnl_##NAME< T, POD >,          \
    VectorConstReference<T, Sz>,        \
    XprLiteral< POD >           \
  >,                \
  Sz                \
>               \
NAME (const Vector<T, Sz>& lhs,         \
      POD rhs) TVMET_CXX_ALWAYS_INLINE;       \
                \
template<class T, std::size_t Sz>       \
XprVector<              \
  XprBinOp<             \
    Fcnl_##NAME< POD, T>,         \
    XprLiteral< POD >,            \
    VectorConstReference<T, Sz>         \
  >,                \
  Sz                \
>               \
NAME (POD lhs,              \
      const Vector<T, Sz>& rhs) TVMET_CXX_ALWAYS_INLINE;

#define TVMET_DECLARE_MACRO ( NAME   ) 

#define TVMET_IMPLEMENT_MACRO ( NAME   ) 

#define TVMET_IMPLEMENT_MACRO ( NAME,
POD   ) 

#define TVMET_IMPLEMENT_MACRO ( NAME   ) 


Author: