C++ named requirements: LayoutMapping (since C++23)
LayoutMapping contrôle le mappage d'un index multidimensionnel vers un décalage unidimensionnel vers le gestionnaire de données dans std:: mdspan .
Table des matières |
Exigences
Un type
M
satisfait
LayoutMapping
s'il modélise
copyable
et
equality_comparable
, et que les éléments suivants sont
true
:
- std:: is_nothrow_move_constructible_v < M >
- std:: is_nothrow_move_assignable_v < M >
- std:: is_nothrow_swappable_v < M >
Et, étant donné les types et valeurs suivants, les expressions présentées dans le tableau ci-dessous sont valides et possèdent la sémantique indiquée :
Légende
| Type | Définition |
M
|
une classe de mappage de disposition |
| Valeur | Définition |
| m |
une valeur de type (éventuellement qualifié const)
M
|
| i , j | des ensembles d'entiers (éventuellement qualifiés const) qui sont des indices multidimensionnels dans m. extents ( ) |
| r | un indice de rang (éventuellement qualifié const) de typename M :: extents_type |
| d_r | un ensemble d'entiers (éventuellement qualifiés const) pour lesquels sizeof... ( d_r ) == M :: extents_type :: rank ( ) est true , l'élément à l'indice de rang r est égal à 1 , et tous les autres éléments sont égaux à 0 |
Types membres
| Nom | Type | Exigences |
|---|---|---|
M::extents_type
|
Spécialisation du modèle de classe std:: extents | |
M::index_type
|
typename M :: extents_type :: index_type | |
M::rank_type
|
typename M :: extents_type :: rank_type | |
M::layout_type
|
Politique de mappage de disposition
MP
où
typename
MP
::
template
mapping
<
E
>
est
M
pour un type d'étendues
E
|
LayoutMappingPolicy
pour laquelle
M
est le type de mappage de
MP
|
Fonctions membres et opérateurs
| Expression | Type de retour | Sémantique |
|---|---|---|
| m. extents ( ) | const typename M :: extents_type & | Retourne une référence constante à l'espace d'index multidimensionnel associé |
| m ( i... ) | typename M :: index_type |
|
| m. required_span_size ( ) | typename M :: index_type |
|
| m. is_unique ( ) | bool | Retourne true uniquement si pour chaque i et j où ( i ! = j || ... ) est true , m ( i... ) ! = m ( j... ) est true . [note 1] |
| m. is_exhaustive ( ) | bool |
Retourne
true
uniquement si pour tout
k
dans l'intervalle
[
0
,
m.
required_span_size
(
)
)
, il existe un
i
tel que
m
(
i...
)
soit égal à
k
.
[note 2]
|
| m. is_strided ( ) | bool | Retourne true uniquement si pour chaque indice de rang r de m. extents ( ) , il existe un entier s_r tel que, pour tout i où ( i + d_r ) est un index multidimensionnel dans m. extents ( ) , m ( ( i + d_r ) ... ) - m ( i... ) est égal à s_r . [note 3] |
| m. stride ( r ) | typename M :: index_type |
|
| M :: is_always_unique ( ) | bool |
|
| M :: is_always_exhaustive ( ) | bool |
|
| M :: is_always_strided ( ) | bool |
|
- ↑ Un mapping peut retourner false même si la condition est satisfaite. Pour certains layouts, il peut ne pas être réalisable de déterminer efficacement si le layout est unique.
- ↑ Idem que ci-dessus, mais dans le cas des layouts exhaustifs.
- ↑ Idem que ci-dessus, mais dans le cas des layouts à pas.
- ↑ Un mapping peut retourner false même si la condition est satisfaite. Pour certains layout mappings, il peut ne pas être réalisable de déterminer si chaque instance est unique.
- ↑ Idem que ci-dessus, mais dans le cas des instances exhaustives.
- ↑ Idem que ci-dessus, mais dans le cas des instances à pas.
Concept
Pour les contraintes utilisées sous std::layout_stride::mapping , le concept suivant (à titre d'exposition uniquement) est défini.
|
template
<
class
M
>
concept
/*similaire-à-mappage-de-disposition*/
=
requires
|
( exposition uniquement* ) | |
Définit les contraintes minimales de facilité d'utilisation de l'exigence LayoutMapping . Ce concept vérifie que les fonctions de traits de mappage de prédicat ci-dessus existent, sont des expressions constantes et ont un type de retour bool .
/*is-extents*/
<
E
>
est
true
si et seulement si
E
est une spécialisation de
std::extents
.
Bibliothèque standard
Les types suivants de la bibliothèque standard satisfont les exigences LayoutMapping :
|
un mappage de disposition de
layout_left
(classe template membre public de
std::layout_left
)
|
|
|
un mappage de disposition de
layout_right
(classe template membre public de
std::layout_right
)
|
|
|
un mappage de disposition de
layout_stride
(classe template membre public de
std::layout_stride
)
|
|
|
un mappage de disposition de
layout_left_padded
(classe template membre public de
std::layout_left_padded<PaddingValue>
)
|
|
|
un mappage de disposition de
layout_right_padded
(classe template membre public de
std::layout_right_padded<PaddingValue>
)
|