Namespaces
Variants

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

From 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