Espacios de nombres
Variantes

Requisitos denominados de C++: LayoutMapping (desde C++23)

De cppreference.com
 
 
Requisitos denominados de C++
Números aleatorios
Concurrencia
(C++11)
(C++11)
Rangos
Vista multidimensional
Otros

 

LayoutMapping controla la asignación de un índice multidimensional a un desplazamiento unidimensional al controlador de datos en std::mdspan.

Requisitos

Un tipo M satisafce LayoutMapping si modela copiable y comparable_en_igualdad, y se cumple lo siguiente:

  • 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 que se muestran 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 (que puede estar calificado constante) M.
i, j Paquetes de enteros (que pueden estar calificados constantes) que son índices multidimensionales en m.extents().
r Un índice de rango (que puede estar calificado constante) de typename M::extents_type.
d_r Un paquete de enteros (que pueden estar calificados constantes) para los que 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 miembro

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 algunas extensiones de tipo E
PolíticaMapeoDiseño para la cual M es el tipo de mapeo de MP

Funciones miembro y operadores

Expresión Tipo devuelto Semántica
m.extents() const typename M::extents_type& Devuelve una referencia constante al espacio de índice multidimensional
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() son true.
  • Esta 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 índice multidimensional m.extents() no es 0.
  • En otro caso, devuelve 0.
m.is_unique() bool Devuelve true sólo si para cada i y j donde (i != j || ...) es true, m(i...) != m(j...) es true. [note 1]
m.is_exhaustive() bool Devuelve true solo si para todos los k en el rango [0m.required_span_size()), existe un i tal que m(i...) es igual a k. [note 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. [note 3]
m.stride(r) typename M::index_type
  • La precondición es que m.is_strided() es true.
  • Devuelve un paso s_r en el índice de ranfo r como se define anteriormente en m.is_strided().
M::is_always_unique() bool
  • Devuelve true solo si m.is_unique() es true para todos los posibles objetos m de tipo M. [note 4]
  • El valor devuelto siempre es una expresión constante.
M::is_always_exhaustive() bool
  • Devuelve true solo si m.is_exhaustive() es true para todos los posibles objetos m de tipo M. [note 5]
  • El valor devuelto siempre es una expresión constante.
M::is_always_strided() bool
  • Devuelve true solo si m.is_strided() es true para todos los posibles objetos m de tipo M. [note 6]
  • El valor devuelto siempre es una expresión constante.
  1. Un mapeo puede devolver false incluso si se cumple la condición. Para ciertos diseños, es posible que no sea posible determinar con eficiencia si el diseño es único.
  2. Lo mismo que el anterior, pero en el caso de diseños exhaustivos.
  3. Igual que el anterior, pero en el caso de diseños escalonados.
  4. Un mapeo puede devolver false incluso si se cumple la condición. Para ciertos mapeos de diseño, puede no ser posible determinar si cada instancia es única.
  5. Lo mismo que el anterior, pero en el caso de instancias exhaustivas.
  6. La mismo que el anterior, pero en el caso de instancias escalonadas.

Concepto

Para los usos de restricciones bajo std::layout_stride::mapping, se define el siguiente concepto de solo exposisición.

template< class M > concept /*mapeo de diseño similar*/ = requires { requires /*es extensión*/<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 de exposición*)

Define las restricciones mínimas de usabilidad del requisito LayoutMapping. Este concepto comprueba que las funciones de atributo de mapeo de predicados mencionadas anteriormente existan, sena expresiones constantes, y tenga un tipo de retorno bool.

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

Biblioteca estándar

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

Un mapeo de diseño de layout_left.
(plantilla de clase miembro pública de std::layout_left)[editar]
Un mapeo de diseño de layout_right.
(plantilla de clase miembro pública de std::layout_right)[editar]
Un mapeo de diseño de layout_stride.
(plantilla de clase miembro pública de std::layout_stride)[editar]
Un mapeo de diseño de layout_left_padded.
(plantilla de clase miembro pública de std::layout_left_padded<PaddingValue>)[editar]
Un mapeo de diseño de layout_right_padded.
(plantilla de clase miembro pública de std::layout_right_padded<PaddingValue>)[editar]

Véase también