Namespaces
Variants

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

From cppreference.net
C++ named requirements

LayoutMapping controla el mapeo de un índice multidimensional a un desplazamiento unidimensional hacia el manejador de datos en std:: mdspan .

Contenidos

Requisitos

Un tipo M satisface LayoutMapping si modela copyable y equality_comparable , y lo siguiente es true :

Y, dados los siguientes tipos y valores, las expresiones mostradas en la tabla a continuación son válidas y tienen la semántica indicada:

Leyenda

Tipo Definición
M una clase de mapeo de diseño
Valor Definición
m un valor de tipo (posiblemente calificado como const) M
i , j paquetes de enteros (posiblemente calificados como const) que son índices multidimensionales en m. extents ( )
r un índice de rango (posiblemente calificado como const) de typename M​ :: ​extents_type
d_r un paquete de enteros (posiblemente calificados como const) para los cuales sizeof... ( d_r ) == M​ :: ​extents_type​ :: ​rank ( ) es true , el elemento en el índice de rango r es igual a 1 , y todos los demás elementos son iguales a 0

Tipos de miembros

Nombre Tipo Requisitos
M::extents_type Especialización de la plantilla de clase std:: extents
M::index_type typename M :: extents_type :: index_type
M::rank_type typename M :: extents_type :: rank_type
M::layout_type Política de mapeo de diseño MP donde typename MP :: template mapping < E > es M
para algún tipo de extensiones E
LayoutMappingPolicy para el cual M es tipo de mapeo de MP

Funciones miembro y operadores

Expresión Tipo de retorno Semántica
m. extents ( ) const typename M​ :: ​extents_type & Devuelve referencia constante al espacio de índices multidimensional asociado
m ( i... ) typename M​ :: ​index_type
  • Devuelve un entero no negativo o tal que o < std:: numeric_limits < typename M​ :: ​index_type > :: ​max ( ) y o <= std:: numeric_limits < std:: size_t > :: ​max ( ) sean ambos true .
  • Dicha expresión es equivalente a m ( static_cast < typename M :: index_type > ( i ) ... ) .
m. required_span_size ( ) typename M​ :: ​index_type
  • Devuelve 1 más el valor máximo de m ( i... ) para todos los i si el tamaño del espacio de índices multidimensional m. extents ( ) no es 0.
  • En caso contrario, devuelve 0 .
m. is_unique ( ) bool Devuelve true únicamente si para todo i y j donde ( i ! = j || ... ) es true , m ( i... ) ! = m ( j... ) es true . [nota 1]
m. is_exhaustive ( ) bool Devuelve true solo si para todo k en el rango [ 0 , m. required_span_size ( ) ) , existe un i tal que m ( i... ) es igual a k . [nota 2]
m. is_strided ( ) bool Devuelve true solo si para cada índice de rango r de m. extents ( ) , existe un entero s_r tal que, para todo i donde ( i + d_r ) es un índice multidimensional en m. extents ( ) , m ( ( i + d_r ) ... ) - m ( i... ) es igual a s_r . [nota 3]
m. stride ( r ) typename M​ :: ​index_type
  • La precondición es que m. is_strided ( ) sea true .
  • Devuelve un stride s_r en el índice de rango r como se define en m. is_strided ( ) anteriormente.
M :: is_always_unique ( ) bool
  • Devuelve true únicamente si m. is_unique ( ) es true para todos los objetos posibles m de tipo M . [nota 4]
  • El valor de retorno es siempre una expresión constante.
M :: is_always_exhaustive ( ) bool
  • Devuelve true solamente si m. is_exhaustive ( ) es true para todos los objetos posibles m de tipo M . [nota 5]
  • El valor de retorno es siempre una expresión constante.
M :: is_always_strided ( ) bool
  • Devuelve true únicamente si m. is_strided ( ) es true para todos los objetos posibles m de tipo M . [nota 6]
  • El valor de retorno es siempre una expresión constante.
  1. Un mapeo puede devolver false incluso si se cumple la condición. Para ciertos layouts, puede que no sea factible determinar eficientemente si el layout es único.
  2. Lo mismo que arriba, pero en el caso de layouts exhaustivos.
  3. Lo mismo que arriba, pero en el caso de layouts con stride.
  4. Un mapeo puede devolver false incluso si se cumple la condición. Para ciertos mapeos de layout, puede que no sea factible determinar si cada instancia es única.
  5. Lo mismo que arriba, pero en el caso de instancias exhaustivas.
  6. Lo mismo que arriba, pero en el caso de instancias con stride.

Concepto

Para las restricciones utilizadas bajo std::layout_stride::mapping , se define el siguiente concepto solo de exposición.

template < class M >

concepto /*layout-mapping-alike*/ = requiere
{
requiere /*is-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 ;

} ;
( solo para exposición* )

Define las restricciones mínimas de usabilidad del LayoutMapping requirement. Este concepto verifica que las funciones de rasgo de mapeo de predicado anteriores existan, sean expresiones constantes y tengan un tipo de retorno de bool .

/*is-extents*/ < E > es true si y solo si E es una especialización de std::extents .

Biblioteca estándar

Los siguientes tipos de biblioteca estándar satisfacen LayoutMapping requisitos:

un mapeo de diseño de layout_left
(clase de plantilla miembro pública de std::layout_left )
un mapeo de diseño de layout_right
(clase de plantilla miembro pública de std::layout_right )
un mapeo de diseño de layout_stride
(clase de plantilla miembro pública de std::layout_stride )
un mapeo de diseño de layout_left_padded
(clase de plantilla miembro pública de std::layout_left_padded<PaddingValue> )
un mapeo de diseño de layout_right_padded
(clase de plantilla miembro pública de std::layout_right_padded<PaddingValue> )

Véase también