C++ named requirements: LayoutMapping (since C++23)
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
:
- std:: is_nothrow_move_constructible_v < M >
- std:: is_nothrow_move_assignable_v < M >
- std:: is_nothrow_swappable_v < M >
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 |
|
| m. required_span_size ( ) | typename M :: index_type |
|
| 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 |
|
| M :: is_always_unique ( ) | bool |
|
| M :: is_always_exhaustive ( ) | bool |
|
| M :: is_always_strided ( ) | bool |
|
- ↑ 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.
- ↑ Lo mismo que arriba, pero en el caso de layouts exhaustivos.
- ↑ Lo mismo que arriba, pero en el caso de layouts con stride.
- ↑ 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.
- ↑ Lo mismo que arriba, pero en el caso de instancias exhaustivas.
- ↑ 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
|
( 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>
)
|