Documentation 6b54b78464
Loading...
Searching...
No Matches
Vector math expression templates

Expression templates for level-1 BLAS operations. More...

Collaboration diagram for Vector math expression templates:

Classes

class  VecExpr::CVecExpr< Derived, Scalar >
 Base vector expression class. More...
 
class  VecExpr::Bcast< Scalar >
 Expression class to broadcast a scalar value. Allows implementing "vector-scalar" operations re-using "vector-vector" expressions. More...
 
struct  VecExpr::add_lref_if< T, bool >
 Mechanism to conditionally (based on "StoreAsRef") add lvalue reference to a type. More...
 
struct  VecExpr::add_lref_if< T, true >
 
struct  VecExpr::store_type< T >
 
class  VecExpr::minus_< U, Scalar >
 
class  VecExpr::abs_< U, Scalar >
 
class  VecExpr::exp_< U, Scalar >
 
class  VecExpr::sqrt_< U, Scalar >
 
class  VecExpr::sign_< U, Scalar >
 
class  VecExpr::max_< U, V, Scalar >
 
class  VecExpr::min_< U, V, Scalar >
 
class  VecExpr::pow_< U, V, Scalar >
 
class  VecExpr::add_< U, V, Scalar >
 
class  VecExpr::sub_< U, V, Scalar >
 
class  VecExpr::mul_< U, V, Scalar >
 
class  VecExpr::div_< U, V, Scalar >
 
class  VecExpr::le_< U, V, Scalar >
 
class  VecExpr::ge_< U, V, Scalar >
 
class  VecExpr::eq_< U, V, Scalar >
 
class  VecExpr::ne_< U, V, Scalar >
 
class  VecExpr::lt_< U, V, Scalar >
 
class  VecExpr::gt_< U, V, Scalar >
 

Macros

#define RETURNS(...)    ->decltype(__VA_ARGS__) { return __VA_ARGS__; }
 
#define MAKE_UNARY_FUN(FUN, EXPR, IMPL)
 
#define sign_impl(x)   Scalar(1 - 2 * (x < 0))
 
#define MAKE_BINARY_FUN(FUN, EXPR, IMPL)
 
#define MAKE_FMINMAX_OVERLOADS(TYPE)
 
#define add_impl(a, b)   a + b
 
#define sub_impl(a, b)   a - b
 
#define mul_impl(a, b)   a* b
 
#define div_impl(a, b)   a / b
 
#define TO_PASSIVE(IMPL)   SU2_TYPE::Passive<Scalar>::Value(IMPL)
 
#define le_impl(a, b)   TO_PASSIVE(a <= b)
 
#define ge_impl(a, b)   TO_PASSIVE(a >= b)
 
#define eq_impl(a, b)   TO_PASSIVE(a == b)
 
#define ne_impl(a, b)   TO_PASSIVE(a != b)
 
#define lt_impl(a, b)   TO_PASSIVE(a < b)
 
#define gt_impl(a, b)   TO_PASSIVE(a > b)
 

Typedefs

template<class T >
using VecExpr::decay_t = typename std::decay< T >::type
 std::decay_t from C++14, used to allow implicit conversions between scalar types, e.g. "CVecExpr<U,double>" + "int/double/etc.".
 
template<class T >
using VecExpr::remove_reference_t = typename std::remove_reference< T >::type
 std::remove_reference_t from C++14, removes references from some type.
 
template<class T >
using VecExpr::store_t = typename store_type< T >::type
 

Functions

template<class U , class S >
auto VecExpr::operator- (const CVecExpr< U, S > &u) -> decltype(minus_< U, S >(u.derived()))
 
template<class U , class S >
auto VecExpr::abs (const CVecExpr< U, S > &u) -> decltype(abs_< U, S >(u.derived()))
 
template<class U , class S >
auto VecExpr::exp (const CVecExpr< U, S > &u) -> decltype(exp_< U, S >(u.derived()))
 
template<class U , class S >
auto VecExpr::sqrt (const CVecExpr< U, S > &u) -> decltype(sqrt_< U, S >(u.derived()))
 
template<class U , class S >
auto VecExpr::sign (const CVecExpr< U, S > &u) -> decltype(sign_< U, S >(u.derived()))
 
int32_t VecExpr::fmax (int32_t a, int32_t b)
 
int32_t VecExpr::fmin (int32_t a, int32_t b)
 
int64_t VecExpr::fmax (int64_t a, int64_t b)
 
int64_t VecExpr::fmin (int64_t a, int64_t b)
 
uint32_t VecExpr::fmax (uint32_t a, uint32_t b)
 
uint32_t VecExpr::fmin (uint32_t a, uint32_t b)
 
uint64_t VecExpr::fmax (uint64_t a, uint64_t b)
 
uint64_t VecExpr::fmin (uint64_t a, uint64_t b)
 
template<class U , class V , class S >
auto VecExpr::fmax (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(max_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::fmax (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(max_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::fmax (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(max_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::fmin (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(min_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::fmin (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(min_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::fmin (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(min_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::pow (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(pow_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::pow (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(pow_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::pow (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(pow_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator+ (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(add_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator+ (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(add_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator+ (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(add_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator- (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(sub_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator- (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(sub_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator- (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(sub_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator* (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(mul_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator* (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(mul_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator* (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(mul_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator/ (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(div_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator/ (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(div_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator/ (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(div_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator<= (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(le_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator<= (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(le_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator<= (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(le_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator>= (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(ge_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator>= (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(ge_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator>= (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(ge_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator== (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(eq_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator== (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(eq_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator== (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(eq_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator!= (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(ne_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator!= (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(ne_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator!= (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(ne_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator< (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(lt_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator< (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(lt_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator< (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(lt_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 
template<class U , class V , class S >
auto VecExpr::operator> (const CVecExpr< U, S > &u, const CVecExpr< V, S > &v) -> decltype(gt_< U, V, S >(u.derived(), v.derived()))
 
template<class U , class S >
auto VecExpr::operator> (const CVecExpr< U, S > &u, decay_t< S > v) -> decltype(gt_< U, Bcast< S >, S >(u.derived(), Bcast< S >(v)))
 
template<class S , class V >
auto VecExpr::operator> (decay_t< S > u, const CVecExpr< V, S > &v) -> decltype(gt_< Bcast< S >, V, S >(Bcast< S >(u), v.derived()))
 

Detailed Description

Expression templates for level-1 BLAS operations.

Macro Definition Documentation

◆ add_impl

#define add_impl (   a,
  b 
)    a + b

◆ div_impl

#define div_impl (   a,
  b 
)    a / b

◆ eq_impl

#define eq_impl (   a,
  b 
)    TO_PASSIVE(a == b)

◆ ge_impl

#define ge_impl (   a,
  b 
)    TO_PASSIVE(a >= b)

◆ gt_impl

#define gt_impl (   a,
  b 
)    TO_PASSIVE(a > b)

◆ le_impl

#define le_impl (   a,
  b 
)    TO_PASSIVE(a <= b)

◆ lt_impl

#define lt_impl (   a,
  b 
)    TO_PASSIVE(a < b)

◆ MAKE_BINARY_FUN

#define MAKE_BINARY_FUN (   FUN,
  EXPR,
  IMPL 
)
Value:
/*!--- Expression class. ---*/ \
template <class U, class V, class Scalar> \
class EXPR : public CVecExpr<EXPR<U, V, Scalar>, Scalar> { \
store_t<const U> u; \
store_t<const V> v; \
\
public: \
static constexpr bool StoreAsRef = false; \
FORCEINLINE EXPR(const U& u_, const V& v_) : u(u_), v(v_) {} \
SU2_CUDA_HOST_DEVICE FORCEINLINE auto operator[](size_t i) const RETURNS(IMPL(u[i], v[i])) \
}; \
/*!--- Vector with vector function overload. ---*/ \
template <class U, class V, class S> \
FORCEINLINE auto FUN(const CVecExpr<U, S>& u, const CVecExpr<V, S>& v) \
RETURNS(EXPR<U, V, S>(u.derived(), v.derived())) \
/*!--- Vector with scalar function overload. ---*/ \
template <class U, class S> \
FORCEINLINE auto FUN(const CVecExpr<U, S>& u, decay_t<S> v) RETURNS(EXPR<U, Bcast<S>, S>(u.derived(), Bcast<S>(v))) \
/*!--- Scalar with vector function overload. ---*/ \
template <class S, class V> \
FORCEINLINE auto FUN(decay_t<S> u, const CVecExpr<V, S>& v) RETURNS(EXPR<Bcast<S>, V, S>(Bcast<S>(u), v.derived()))
#define SU2_CUDA_HOST_DEVICE
Definition code_config.hpp:57
#define FORCEINLINE
Definition code_config.hpp:44
#define RETURNS(...)
Definition vector_expressions.hpp:122
@ V
Menter k-w SST model with vorticity production terms.

◆ MAKE_FMINMAX_OVERLOADS

#define MAKE_FMINMAX_OVERLOADS (   TYPE)
Value:
FORCEINLINE TYPE fmax(TYPE a, TYPE b) { return a < b ? b : a; } \
FORCEINLINE TYPE fmin(TYPE a, TYPE b) { return a < b ? a : b; }

◆ MAKE_UNARY_FUN

#define MAKE_UNARY_FUN (   FUN,
  EXPR,
  IMPL 
)
Value:
/*!--- Expression class. ---*/ \
template <class U, class Scalar> \
class EXPR : public CVecExpr<EXPR<U, Scalar>, Scalar> { \
store_t<const U> u; \
\
public: \
static constexpr bool StoreAsRef = false; \
FORCEINLINE EXPR(const U& u_) : u(u_) {} \
SU2_CUDA_HOST_DEVICE FORCEINLINE auto operator[](size_t i) const RETURNS(IMPL(u[i])) \
}; \
/*!--- Function overload, returns an expression object. ---*/ \
template <class U, class S> \
FORCEINLINE auto FUN(const CVecExpr<U, S>& u) RETURNS(EXPR<U, S>(u.derived()))

◆ mul_impl

#define mul_impl (   a,
  b 
)    a* b

◆ ne_impl

#define ne_impl (   a,
  b 
)    TO_PASSIVE(a != b)

◆ RETURNS

#define RETURNS (   ...)     ->decltype(__VA_ARGS__) { return __VA_ARGS__; }

◆ sign_impl

#define sign_impl (   x)    Scalar(1 - 2 * (x < 0))

◆ sub_impl

#define sub_impl (   a,
  b 
)    a - b

◆ TO_PASSIVE

#define TO_PASSIVE (   IMPL)    SU2_TYPE::Passive<Scalar>::Value(IMPL)

Typedef Documentation

◆ decay_t

template<class T >
using VecExpr::decay_t = typedef typename std::decay<T>::type

std::decay_t from C++14, used to allow implicit conversions between scalar types, e.g. "CVecExpr<U,double>" + "int/double/etc.".

◆ remove_reference_t

template<class T >
using VecExpr::remove_reference_t = typedef typename std::remove_reference<T>::type

std::remove_reference_t from C++14, removes references from some type.

◆ store_t

template<class T >
using VecExpr::store_t = typedef typename store_type<T>::type

Function Documentation

◆ abs()

template<class U , class S >
auto VecExpr::abs ( const CVecExpr< U, S > &  u) -> decltype( abs_ <U, S>(u.derived()) )
inline

— Function overload, returns an expression object. —

◆ exp()

template<class U , class S >
auto VecExpr::exp ( const CVecExpr< U, S > &  u) -> decltype( exp_ <U, S>(u.derived()) )
inline

— Function overload, returns an expression object. —

◆ fmax() [1/7]

template<class U , class V , class S >
auto VecExpr::fmax ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( max_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ fmax() [2/7]

template<class U , class S >
auto VecExpr::fmax ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( max_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ fmax() [3/7]

template<class S , class V >
auto VecExpr::fmax ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( max_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ fmax() [4/7]

int32_t VecExpr::fmax ( int32_t  a,
int32_t  b 
)
inline

◆ fmax() [5/7]

int64_t VecExpr::fmax ( int64_t  a,
int64_t  b 
)
inline

◆ fmax() [6/7]

uint32_t VecExpr::fmax ( uint32_t  a,
uint32_t  b 
)
inline

◆ fmax() [7/7]

uint64_t VecExpr::fmax ( uint64_t  a,
uint64_t  b 
)
inline

◆ fmin() [1/7]

template<class U , class V , class S >
auto VecExpr::fmin ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( min_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ fmin() [2/7]

template<class U , class S >
auto VecExpr::fmin ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( min_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ fmin() [3/7]

template<class S , class V >
auto VecExpr::fmin ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( min_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ fmin() [4/7]

int32_t VecExpr::fmin ( int32_t  a,
int32_t  b 
)
inline

◆ fmin() [5/7]

int64_t VecExpr::fmin ( int64_t  a,
int64_t  b 
)
inline

◆ fmin() [6/7]

uint32_t VecExpr::fmin ( uint32_t  a,
uint32_t  b 
)
inline

◆ fmin() [7/7]

uint64_t VecExpr::fmin ( uint64_t  a,
uint64_t  b 
)
inline

◆ operator!=() [1/3]

template<class U , class V , class S >
auto VecExpr::operator!= ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( ne_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator!=() [2/3]

template<class U , class S >
auto VecExpr::operator!= ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( ne_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator!=() [3/3]

template<class S , class V >
auto VecExpr::operator!= ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( ne_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator*() [1/3]

template<class U , class V , class S >
auto VecExpr::operator* ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( mul_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator*() [2/3]

template<class U , class S >
auto VecExpr::operator* ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( mul_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator*() [3/3]

template<class S , class V >
auto VecExpr::operator* ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( mul_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator+() [1/3]

template<class U , class V , class S >
auto VecExpr::operator+ ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( add_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator+() [2/3]

template<class U , class S >
auto VecExpr::operator+ ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( add_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator+() [3/3]

template<class S , class V >
auto VecExpr::operator+ ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( add_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator-() [1/4]

template<class U , class S >
auto VecExpr::operator- ( const CVecExpr< U, S > &  u) -> decltype( minus_ <U, S>(u.derived()) )
inline

— Function overload, returns an expression object. —

◆ operator-() [2/4]

template<class U , class V , class S >
auto VecExpr::operator- ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( sub_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator-() [3/4]

template<class U , class S >
auto VecExpr::operator- ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( sub_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator-() [4/4]

template<class S , class V >
auto VecExpr::operator- ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( sub_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator/() [1/3]

template<class U , class V , class S >
auto VecExpr::operator/ ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( div_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator/() [2/3]

template<class U , class S >
auto VecExpr::operator/ ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( div_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator/() [3/3]

template<class S , class V >
auto VecExpr::operator/ ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( div_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator<() [1/3]

template<class U , class V , class S >
auto VecExpr::operator< ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( lt_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator<() [2/3]

template<class U , class S >
auto VecExpr::operator< ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( lt_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator<() [3/3]

template<class S , class V >
auto VecExpr::operator< ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( lt_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator<=() [1/3]

template<class U , class V , class S >
auto VecExpr::operator<= ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( le_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator<=() [2/3]

template<class U , class S >
auto VecExpr::operator<= ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( le_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator<=() [3/3]

template<class S , class V >
auto VecExpr::operator<= ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( le_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator==() [1/3]

template<class U , class V , class S >
auto VecExpr::operator== ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( eq_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator==() [2/3]

template<class U , class S >
auto VecExpr::operator== ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( eq_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator==() [3/3]

template<class S , class V >
auto VecExpr::operator== ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( eq_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator>() [1/3]

template<class U , class V , class S >
auto VecExpr::operator> ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( gt_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator>() [2/3]

template<class U , class S >
auto VecExpr::operator> ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( gt_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator>() [3/3]

template<class S , class V >
auto VecExpr::operator> ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( gt_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ operator>=() [1/3]

template<class U , class V , class S >
auto VecExpr::operator>= ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( ge_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ operator>=() [2/3]

template<class U , class S >
auto VecExpr::operator>= ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( ge_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ operator>=() [3/3]

template<class S , class V >
auto VecExpr::operator>= ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( ge_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ pow() [1/3]

template<class U , class V , class S >
auto VecExpr::pow ( const CVecExpr< U, S > &  u,
const CVecExpr< V, S > &  v 
) -> decltype( pow_ <U, V, S>(u.derived(), v.derived()) )
inline

— Vector with vector function overload. —

◆ pow() [2/3]

template<class U , class S >
auto VecExpr::pow ( const CVecExpr< U, S > &  u,
decay_t< S >  v 
) -> decltype( pow_ <U, Bcast<S>, S>(u.derived(), Bcast<S>(v)) )
inline

— Vector with scalar function overload. —

◆ pow() [3/3]

template<class S , class V >
auto VecExpr::pow ( decay_t< S >  u,
const CVecExpr< V, S > &  v 
) -> decltype( pow_ <Bcast<S>, V, S>(Bcast<S>(u), v.derived()) )
inline

— Scalar with vector function overload. —

◆ sign()

template<class U , class S >
auto VecExpr::sign ( const CVecExpr< U, S > &  u) -> decltype( sign_ <U, S>(u.derived()) )
inline

— Function overload, returns an expression object. —

◆ sqrt()

template<class U , class S >
auto VecExpr::sqrt ( const CVecExpr< U, S > &  u) -> decltype( sqrt_ <U, S>(u.derived()) )
inline

— Function overload, returns an expression object. —