Namespaces
Variants

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

From 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 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 ( 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 ( 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