std::experimental:: where_expression
|
Défini dans l'en-tête
<experimental/simd>
|
||
|
template
<
class
M,
class
V
>
class where_expression ; |
(parallelism TS v2) | |
Le modèle de classe
where_expression
abstrait la notion d'éléments sélectionnés
d'une lvalue donnée de type arithmétique ou parallèle aux données. Les éléments sélectionnés sont les éléments de la lvalue (de type
V
) pour lesquels l'élément correspondant du masque (de type
M
) est vrai. Les opérateurs appliqués aux objets de type
where_expression<M, V>
ne sont appliqués qu'aux éléments sélectionnés. Tous les autres éléments restent inchangés.
Utilisez la fonction
where
pour construire des objets
where_expression
.
Paramètres du modèle
| M | - | Le type de masque |
| V | - | Le type de valeur sur lequel M s'applique |
Les combinaisons valides de
(
M
,
V
)
sont :
-
(simd_mask < T, Abi >,simd < T, Abi >), -
(simd_mask < T, Abi >,simd_mask < T, Abi >), -
(bool,T).
Fonctions membres
|
assigne aux positions sélectionnées
(fonction membre publique) |
|
|
opérateurs composés
(fonction membre publique) |
|
|
opérateurs d'incrémentation et de décrémentation
(fonction membre publique) |
|
|
charge depuis l'adresse vers les positions sélectionnées
(fonction membre publique) |
Exemple
#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); }
Sortie possible :
-2 -1 0 1 2 1 0 1