std::experimental::where_expression
From cppreference.com
< cpp | experimental | simd
Defined in header <experimental/simd>
|
||
template< class M, class V > class where_expression; |
(parallelism TS v2) | |
The class template where_expression
abstracts the notion of selected elements
of a given lvalue of arithmetic or data-parallel type. Selected elements are the elements of the lvalue (of type V
) for which the corresponding element of the mask (of type M
) is true. Operators applied to objects of type where_expression<M, V>
are applied only to selected elements. All other elements are left unchanged.
Use the where
function to construct where_expression
objects.
Template parameters
M | - | The mask type |
V | - | The value type M applies on |
Valid combinations of (
M,
V)
are:
-
(
simd_mask<T, Abi>,
simd<T, Abi>)
, -
(
simd_mask<T, Abi>,
simd_mask<T, Abi>)
, -
(
bool,
T)
.
Member functions
assigns to selected positions (public member function) | |
compound operators (public member function) | |
increment and decrement operators (public member function) | |
loads from address to selected positions (public member function) |
Example
Run this code
#include <cstddef> #include <experimental/simd> #include <iostream> namespace stdx = std::experimental; void print(auto const& a) { for (std::size_t i{}; i != std::size(a); ++i) std::cout << a[i] << ' '; std::cout << '\n'; } template<class A> stdx::simd<int, A> my_abs(stdx::simd<int, A> x) { where(x < 0, x) = -x; return x; } int main() { const stdx::native_simd<int> a([](int i) { return i - 2; }); print(a); const auto b = my_abs(a); print(b); }
Possible output:
-2 -1 0 1 2 1 0 1