C++ named requirements: LayoutMapping (since C++23)
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:
- std:: is_nothrow_move_constructible_v < M >
- std:: is_nothrow_move_assignable_v < M >
- std:: is_nothrow_swappable_v < M >
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 |
|
| m. required_span_size ( ) | typename M :: index_type |
|
| 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 |
|
| M :: is_always_unique ( ) | bool |
|
| M :: is_always_exhaustive ( ) | bool |
|
| M :: is_always_strided ( ) | bool |
|
- ↑ 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.
- ↑ Gleich wie oben, jedoch im Fall von erschöpfenden Layouts.
- ↑ Gleich wie oben, jedoch im Fall von gestaffelten Layouts.
- ↑ 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.
- ↑ Gleich wie oben, jedoch im Fall von erschöpfenden Instanzen.
- ↑ 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
|
( 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>
)
|