Namespaces
Variants

std::experimental:: where_expression

From cppreference.net
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