![]() |
Vc
1.1.0
SIMD Vector Classes for C++
|
|
This set of (template) classes provides types that allow an arbitrarily sized set of values of an arithmetic type, much like a std::array
. But in contrast to std::array
the types behave like the SIMD vector types, implementing all needed operators and functions.
Classes | |
class | SimdArray< T, N, VectorType, size_t > |
Data-parallel type with (somewhat) arbitrary number of components. More... | |
template<size_t A, size_t B, size_t N> | |
using | selectorType = std::integral_constant< bool,((A &(1<< B))!=0)> |
true-/false_type that selects whether the argument with index B should be unpacked | |
template<typename Op , typename Arg > | |
decltype(actual_value(std::declval< Op & >(), std::declval< Arg >())) | conditionalUnpack (std::true_type, Op op, Arg &&arg) |
transforms arg via actual_value | |
template<size_t I, typename Op , typename R , typename... Args, size_t... Indexes> | |
decltype(std::declval< Op & >()(std::declval< R & >(), conditionalUnpack(selectorType< I, Indexes, icc_sizeof_workaround< Args... >()>(), std::declval< Op & >(), std::declval< Args >())...)) | unpackArgumentsAutoImpl (int, index_sequence< Indexes... >, Op op, R &&r, Args &&...args) |
ends the recursion, transforms arguments, and calls op | |
template<typename Op , typename Arg > | |
Arg | conditionalUnpack (std::false_type, Op, Arg &&arg) |
forwards arg to its return value | |
template<size_t I, typename Op , typename R , typename... Args, size_t... Indexes> | |
void | unpackArgumentsAutoImpl (float, index_sequence< Indexes... > is, Op op, R &&r, Args &&...args) |
the current actual_value calls don't work: recurse to I + 1 | |
template<typename Op , typename R , typename... Args> | |
void | unpackArgumentsAuto (Op op, R &&r, Args &&...args) |
The interface to start the machinery. | |