Namespaces
Variants

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

From es.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