Implementation details

Helper C++ classes, functions and namespaces.

remove_cvref_t

Typedef remove_cvref_t

xsimd::details::is_batch

Class is_batch

xsimd::details::is_expr

Class is_expr

xsimd::details::is_valid_expr

Class is_valid_expr

xsimd::details::expr_size_impl

Class expr_size_impl

xsimd::details::expr_maker

Class expr_maker

xsimd::details::make_expr

Function make_expr

Typedefs

using xsimd::details::remove_cvref_t = std::remove_cv_t<std::remove_reference_t<T>>

Convenience template alias.

Classes

template<typename T>
class is_batch : public false_type

Type trait class to detect batch<T, N> values.

General implementation for all types

Specialization for batch<T, N>

template<typename T>
class is_expr : public false_type

Type trait class to detect expr_base<T> values.

General implementation for all types

Specialization for expr_base<T>

template<typename T, typename U = remove_cvref_t<T>>
class is_valid_expr : public std::conditional_t<std::is_arithmetic<U>::value || (is_batch<U>::value && !std::is_convertible<U *, simd_base<U> *>::value) || std::is_convertible<U *, expr_base<U> *>::value, std::true_type, std::false_type>

Type trait class to detect valid expressions.

A valid expression for our purposes is either:

  • an arithmetic value

  • a batch<T, N> value (provided that it does not inherit from simd_base since those are from the XSIMD library)

  • a class inheriting from expr_base

template<typename T>
class expr_size_impl

Trait class to calculate the size of an expression.

template<typename T, bool = std::is_arithmetic<T>::value>
class expr_maker

Expression creation helper class.

Implementation for general expressions

Functions

template<typename T>
constexpr auto xsimd::details::make_expr(T &&t)

Convenience function to generate expressions from an arbitrary value.

Return

An expression corresponding to the input parameter

Template Parameters
  • T: Some type

Parameters
  • t: Some object