23namespace vctr::expressions
28template <
size_t extent,
class SrcAType,
class SrcBType>
34 VCTR_COMMON_BINARY_VEC_VEC_EXPRESSION_MEMBERS (
AddVectors, srcA, srcB)
36 VCTR_FORCEDINLINE
constexpr value_type operator[] (
size_t i)
const
38 return srcA[i] + srcB[i];
41 VCTR_FORCEDINLINE
const value_type* evalNextVectorOpInExpressionChain (value_type* dst)
const
44 Expression::Accelerate::add (srcA.evalNextVectorOpInExpressionChain (dst), srcB.evalNextVectorOpInExpressionChain (dst), dst, size());
48 VCTR_FORCEDINLINE
const value_type* evalNextVectorOpInExpressionChain (value_type* dst)
const
51 Expression::IPP::add (srcA.evalNextVectorOpInExpressionChain (dst), srcB.evalNextVectorOpInExpressionChain (dst), dst, size());
60 return Expression::AVX::add (srcA.getAVX (i), srcB.getAVX (i));
66 return Expression::AVX::add (srcA.getAVX (i), srcB.getAVX (i));
74 return Expression::SSE::add (srcA.getSSE (i), srcB.getSSE (i));
80template <
size_t extent,
class SrcType>
86 VCTR_COMMON_BINARY_SINGLE_VEC_EXPRESSION_MEMBERS (
AddSingleToVec, src, single)
88 VCTR_FORCEDINLINE
constexpr value_type operator[] (
size_t i)
const
90 return single + src[i];
93 VCTR_FORCEDINLINE
const value_type* evalNextVectorOpInExpressionChain (value_type* dst)
const
96 Expression::Accelerate::add (src.evalNextVectorOpInExpressionChain (dst), single, dst, size());
100 VCTR_FORCEDINLINE
const value_type* evalNextVectorOpInExpressionChain (value_type* dst)
const
103 Expression::IPP::add (src.evalNextVectorOpInExpressionChain (dst), single, dst,
sizeToInt (size()));
110 requires (archX64 &&
has::getAVX<SrcType> && Expression::allElementTypesSame && Expression::CommonElement::isRealFloat)
112 return Expression::AVX::add (Expression::AVX::fromSSE (singleAsSSE, singleAsSSE), src.getAVX (i));
116 requires (archX64 &&
has::getAVX<SrcType> && Expression::allElementTypesSame && Expression::CommonElement::isInt)
118 return Expression::AVX::add (Expression::AVX::fromSSE (singleAsSSE, singleAsSSE), src.getAVX (i));
125 return Expression::SSE::add (singleAsSSE, src.getSSE (i));
138template <is::anyVctrOrExpression SrcAType, is::anyVctrOrExpression SrcBType>
142 constexpr auto extent = getCommonExtent<SrcAType, SrcBType>();
151template <is::anyVctrOrExpression Src>
152constexpr auto operator+ (
typename std::remove_cvref_t<Src>::value_type single, Src&& vec)
161template <is::anyVctrOrExpression Src>
162constexpr auto operator+ (Src&& vec,
typename std::remove_cvref_t<Src>::value_type single)
Adds a single value to a vector like type.
Definition: Add.h:82
Adds two vector like types.
Definition: Add.h:30
Constrains a type to have a member function getAVX (size_t) const.
Definition: ContainerAndExpressionConcepts.h:78
Constrains a type to have a member function getSSE (size_t) const.
Definition: ContainerAndExpressionConcepts.h:82
A combined concept to check if Apple Accelerate is a suitable option for a real or complex valued flo...
Definition: ContainerAndExpressionConcepts.h:311
A combined concept to check if Apple Accelerate is a suitable option for a real or complex valued flo...
Definition: ContainerAndExpressionConcepts.h:250
A combined concept to check if Intel IPP is a suitable option for a real or complex valued floating p...
Definition: ContainerAndExpressionConcepts.h:324
A combined concept to check if Intel IPP is a suitable option for a real or complex valued floating p...
Definition: ContainerAndExpressionConcepts.h:278
constexpr auto operator+(SrcAType &&a, SrcBType &&b)
Returns an expression that adds two vector or expression sources.
Definition: Add.h:139
The main namespace of the VCTR project.
Definition: Array.h:24
constexpr void assertCommonSize(const A &a, const B &b)
Ensures that both sources have the same size.
Definition: Traits.h:253
typename detail::ValueType< std::remove_cvref_t< T > >::Type ValueType
If T is an expression template, it equals its return type, if it's a type that defines value_type as ...
Definition: Traits.h:201
int sizeToInt(size_t size)
Casts the size_t argument to an int.
Definition: PlatformVectorOpsHelpers.h:27
Definition: AVXRegister.h:28
The base class to every expression template.
Definition: ExpressionTemplate.h:37
Definition: SSERegister.h:28