Namespaces
Variants

C++ named requirements: LayoutMapping (since C++23)

From de.cppreference.net
C++ named requirements

LayoutMapping steuert die Abbildung eines mehrdimensionalen Index auf einen eindimensionalen Offset zum Datenhandle in std:: mdspan .

Inhaltsverzeichnis

Anforderungen

Ein Typ M erfüllt LayoutMapping , wenn er copyable und equality_comparable modelliert und die folgenden Bedingungen true sind:

**Anmerkung:** Da der Text ausschließlich aus C++-spezifischen Begriffen und Code-Elementen besteht, die gemäß den Anweisungen nicht übersetzt werden sollen, bleibt der Inhalt unverändert. Die HTML-Struktur und Formatierung wurden vollständig beibehalten.

Und, bei den folgenden Typen und Werten sind die in der nachstehenden Tabelle gezeigten Ausdrücke gültig und haben die angegebene Semantik:

Legende

Typ Definition
M eine Layout-Mapping-Klasse
Wert Definition
m ein Wert vom Typ (möglicherweise const-qualifiziert) M
i , j Pakete von (möglicherweise const-qualifizierten) Ganzzahlen, die mehrdimensionale Indizes in m. extents ( ) sind
r ein (möglicherweise const-qualifizierter) Rangindex von typename M​ :: ​extents_type
d_r ein Paket von (möglicherweise const-qualifizierten) Ganzzahlen, für die sizeof... ( d_r ) == M​ :: ​extents_type​ :: ​rank ( ) true ist, das Element am Rangindex r gleich 1 ist und alle anderen Elemente gleich ​ 0 ​ sind

Mitgliedertypen

Name Typ Anforderungen
M::extents_type Spezialisierung des Klassentemplates std:: extents
M::index_type typename M :: extents_type :: index_type
M::rank_type typename M :: extents_type :: rank_type
M::layout_type Layout-Mapping-Richtlinie MP wobei typename MP :: template mapping < E > gleich M
für einen Extents-Typ E
LayoutMappingPolicy für die M der Mapping-Typ von MP ist

Memberfunktionen und Operatoren

Expression Rückgabetyp Semantik
m. extents ( ) const typename M​ :: ​extents_type & Gibt eine konstante Referenz auf den zugehörigen mehrdimensionalen Indexraum zurück
m ( i... ) typename M​ :: ​index_type
  • Gibt eine nichtnegative Ganzzahl o zurück, sodass o < std:: numeric_limits < typename M​ :: ​index_type > ​ :: ​max ( ) und o <= std:: numeric_limits < std:: size_t > ​ :: ​max ( ) beide true sind.
  • Ein solcher Ausdruck ist äquivalent zu m ( static_cast < typename M :: index_type > ( i ) ... ) .
m. required_span_size ( ) typename M​ :: ​index_type
  • Gibt 1 plus den Maximalwert von m ( i... ) für alle i zurück, falls die Größe des mehrdimensionalen Indexraums m. extents ( ) nicht 0 ist.
  • Andernfalls gibt ​ 0 ​ zurück.
m. is_unique ( ) bool Gibt true nur dann zurück, wenn für jedes i und j , bei denen ( i ! = j || ... ) true ist, m ( i... ) ! = m ( j... ) ebenfalls true ist. [Anmerkung 1]
m. is_exhaustive ( ) bool Gibt true nur dann zurück, wenn für alle k im Bereich [ ​ 0 ​ , m. required_span_size ( ) ) ein i existiert, sodass m ( i... ) gleich k ist. [Anmerkung 2]
m. is_strided ( ) bool Gibt true nur dann zurück, wenn für jeden Rangindex r von m. extents ( ) eine ganze Zahl s_r existiert, so dass für alle i , bei denen ( i + d_r ) ein multidimensionaler Index in m. extents ( ) ist, m ( ( i + d_r ) ... ) - m ( i... ) gleich s_r ist. [Anmerkung 3]
m. stride ( r ) typename M​ :: ​index_type
  • Die Vorbedingung ist, dass m. is_strided ( ) true ist.
  • Gibt einen Stride s_r am Rangindex r zurück, wie in m. is_strided ( ) oben definiert.
M :: is_always_unique ( ) bool
  • Gibt true nur dann zurück, wenn m. is_unique ( ) für alle möglichen Objekte m vom Typ M true ist. [Anmerkung 4]
  • Der Rückgabewert ist stets ein konstanter Ausdruck.
M :: is_always_exhaustive ( ) bool
  • Gibt true nur dann zurück, wenn m. is_exhaustive ( ) für alle möglichen Objekte m vom Typ M true ist. [Anmerkung 5]
  • Der Rückgabewert ist stets ein konstanter Ausdruck.
M :: is_always_strided ( ) bool
  • Gibt nur dann true zurück, wenn m. is_strided ( ) für alle möglichen Objekte m vom Typ M true ist. [Anmerkung 6]
  • Der Rückgabewert ist immer ein konstanter Ausdruck.
  1. ↑ Eine Abbildung kann false zurückgeben, selbst wenn die Bedingung erfüllt ist. Für bestimmte Layouts ist es möglicherweise nicht praktikabel, effizient zu bestimmen, ob das Layout eindeutig ist.
  2. ↑ Gleich wie oben, jedoch im Fall von erschöpfenden Layouts.
  3. ↑ Gleich wie oben, jedoch im Fall von gestaffelten Layouts.
  4. ↑ Eine Abbildung kann false zurückgeben, selbst wenn die Bedingung erfüllt ist. Für bestimmte Layoutabbildungen ist es möglicherweise nicht praktikabel zu bestimmen, ob jede Instanz eindeutig ist.
  5. ↑ Gleich wie oben, jedoch im Fall von erschöpfenden Instanzen.
  6. ↑ Gleich wie oben, jedoch im Fall von gestaffelten Instanzen.

Konzept

Für die unter std::layout_stride::mapping verwendeten Constraints wird das folgende, nur zur Darstellung dienende Konzept definiert.

template < class M >

Konzept /*layout-mapping-ähnlich*/ = erfordert
{
erfordert /*ist-extents*/ < typename M :: extents_type > ;
{ M :: is_always_strided ( ) } - > std:: same_as < bool > ;
{ M :: is_always_exhaustive ( ) } - > std:: same_as < bool > ;
{ M :: is_always_unique ( ) } - > std:: same_as < bool > ;
std:: bool_constant < M :: is_always_strided ( ) > :: value ;
std:: bool_constant < M :: is_always_exhaustive ( ) > :: value ;
std:: bool_constant < M :: is_always_unique ( ) > :: value ;

} ;
( nur zur Darstellung* )

Definiert die minimalen Nutzbarkeitsanforderungen des LayoutMapping -Konzepts. Dieses Konzept prüft, dass die oben genannten Prädikat-Mapping-Merkmalsfunktionen existieren, konstante Ausdrücke sind und einen Rückgabetyp von bool haben.

/*is-extents*/ < E > ist true genau dann, wenn E eine Spezialisierung von std::extents ist.

Standardbibliothek

Die folgenden Standardbibliothekstypen erfüllen LayoutMapping -Anforderungen:

eine Layout-Abbildung von layout_left
(öffentliche Mitgliedsklassen-Template von std::layout_left )
eine Layout-Abbildung von layout_right
(öffentliche Mitgliedsklassen-Template von std::layout_right )
eine Layout-Abbildung von layout_stride
(öffentliche Mitgliedsklassen-Template von std::layout_stride )
eine Layout-Abbildung von layout_left_padded
(öffentliche Mitgliedsklassen-Template von std::layout_left_padded<PaddingValue> )
eine Layout-Abbildung von layout_right_padded
(öffentliche Mitgliedsklassen-Template von std::layout_right_padded<PaddingValue> )

Siehe auch