Namespaces
Variants

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

From fr.cppreference.net
C++ named requirements

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 :

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
  • Retourne un entier non négatif o tel que o < std:: numeric_limits < typename M​ :: ​index_type > ​ :: ​max ( ) et o <= std:: numeric_limits < std:: size_t > ​ :: ​max ( ) soient tous deux true .
  • Une telle expression est équivalente à m ( static_cast < typename M :: index_type > ( i ) ... ) .
m. required_span_size ( ) typename M​ :: ​index_type
  • Retourne 1 plus la valeur maximale de m ( i... ) pour tous les i si la taille de l'espace d'index multidimensionnel m. extents ( ) n'est pas 0.
  • Sinon, retourne ​ 0 ​ .
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
  • La précondition est que m. is_strided ( ) soit true .
  • Retourne un stride s_r à l'index de rang r tel que défini dans m. is_strided ( ) ci-dessus.
M :: is_always_unique ( ) bool
  • Retourne true uniquement si m. is_unique ( ) est true pour tous les objets possibles m de type M . [note 4]
  • La valeur de retour est toujours une expression constante.
M :: is_always_exhaustive ( ) bool
  • Retourne true uniquement si m. is_exhaustive ( ) est true pour tous les objets possibles m de type M . [note 5]
  • La valeur de retour est toujours une expression constante.
M :: is_always_strided ( ) bool
  • Retourne true uniquement si m. is_strided ( ) est true pour tous les objets possibles m de type M . [note 6]
  • La valeur de retour est toujours une expression constante.
  1. ↑ 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.
  2. ↑ Idem que ci-dessus, mais dans le cas des layouts exhaustifs.
  3. ↑ Idem que ci-dessus, mais dans le cas des layouts à pas.
  4. ↑ 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.
  5. ↑ Idem que ci-dessus, mais dans le cas des instances exhaustives.
  6. ↑ 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
{
requires /*est-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 ;

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

Voir aussi