Namespaces
Variants

std::experimental:: where_expression

From cppreference.net
Definiert in Header <experimental/simd>
template < class M, class V >
class where_expression ;
(Parallelism TS v2)

Die Klassenvorlage where_expression abstrahiert das Konzept ausgewählter Elemente eines gegebenen L-Werts arithmetischen oder datenparallelen Typs. Ausgewählte Elemente sind die Elemente des L-Werts (vom Typ V ), für die das entsprechende Element der Maske (vom Typ M ) wahr ist. Operatoren, die auf Objekte vom Typ where_expression<M, V> angewendet werden, werden nur auf ausgewählte Elemente angewendet. Alle anderen Elemente bleiben unverändert.

Verwenden Sie die where Funktion, um where_expression Objekte zu konstruieren.

Template-Parameter

M - Der Maskentyp
V - Der Werttyp, auf den M angewendet wird

Gültige Kombinationen von ( M , V ) sind:

  • ( simd_mask < T, Abi > , simd < T, Abi > ) ,
  • ( simd_mask < T, Abi > , simd_mask < T, Abi > ) ,
  • ( bool , T ) .

Memberfunktionen

weist ausgewählten Positionen zu
(öffentliche Elementfunktion)
zusammengesetzte Operatoren
(öffentliche Elementfunktion)
Inkrement- und Dekrementoperatoren
(öffentliche Elementfunktion)
lädt von Adresse in ausgewählte Positionen
(öffentliche Elementfunktion)

Beispiel

#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);
}

Mögliche Ausgabe:

-2 -1 0 1 
2 1 0 1