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 [0, m.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