Namespaces
Variants

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

From ru.cppreference.net
C++ named requirements

LayoutMapping управляет отображением многомерного индекса в одномерное смещение к дескриптору данных в std:: mdspan .

Содержание

Требования

Тип M удовлетворяет требованиям LayoutMapping , если он моделирует copyable и equality_comparable , и следующие условия являются true :

**Примечание:** Весь представленный код на C++ оставлен без изменений в соответствии с требованиями, включая HTML-теги, атрибуты и содержимое внутри тегов ``. В данном фрагменте отсутствует переводимый текст за пределами C++ кода.

И, учитывая следующие типы и значения, выражения, приведенные в таблице ниже, являются допустимыми и имеют указанную семантику:

Легенда

Тип Определение
M класс отображения компоновки
Значение Определение
m значение типа (возможно, с квалификатором const) M
i , j наборы (возможно, с квалификатором const) целых чисел, которые являются многомерными индексами в m. extents ( )
r (возможно, с квалификатором const) индекс ранга typename M​ :: ​extents_type
d_r набор (возможно, с квалификатором const) целых чисел, для которых sizeof... ( d_r ) == M​ :: ​extents_type​ :: ​rank ( ) равно true , элемент с индексом ранга r равен 1 , а все остальные элементы равны ​ 0 ​

Типы членов

Название Тип Требования
M::extents_type Специализация шаблона класса std:: extents
M::index_type typename M :: extents_type :: index_type
M::rank_type typename M :: extents_type :: rank_type
M::layout_type Политика маппинга размещения MP где typename MP :: template mapping < E > является M
для некоторого типа размерностей E
LayoutMappingPolicy для которого M является типом маппинга MP

Функции-члены и операторы

Expression Return type Semantics
m. extents ( ) const typename M​ :: ​extents_type & Возвращает константную ссылку на связанное многомерное индексное пространство
m ( i... ) typename M​ :: ​index_type
  • Возвращает неотрицательное целое число o такое, что o < std:: numeric_limits < typename M​ :: ​index_type > ​ :: ​max ( ) и o <= std:: numeric_limits < std:: size_t > ​ :: ​max ( ) оба равны true .
  • Такое выражение эквивалентно m ( static_cast < typename M :: index_type > ( i ) ... ) .
m. required_span_size ( ) typename M​ :: ​index_type
  • Возвращает 1 плюс максимальное значение m ( i... ) для всех i если размер многомерного индексного пространства m. extents ( ) не равен 0.
  • В противном случае возвращает ​ 0 ​ .
m. is_unique ( ) bool Возвращает true только если для всех i и j где ( i ! = j || ... ) равно true , m ( i... ) ! = m ( j... ) равно true . [примечание 1]
m. is_exhaustive ( ) bool Возвращает true только если для всех k в диапазоне [ ​ 0 ​ , m. required_span_size ( ) ) , существует такой i , что m ( i... ) равно k . [примечание 2]
m. is_strided ( ) bool Возвращает true только если для каждого индексного ранга r из m. extents ( ) существует целое число s_r такое, что для всех i где ( i + d_r ) является многомерным индексом в m. extents ( ) , m ( ( i + d_r ) ... ) - m ( i... ) равно s_r . [примечание 3]
m. stride ( r ) typename M​ :: ​index_type
  • Предусловие состоит в том, что m. is_strided ( ) равно true .
  • Возвращает шаг s_r по индексу ранга r , как определено в m. is_strided ( ) выше.
M :: is_always_unique ( ) bool
  • Возвращает true только если m. is_unique ( ) равно true для всех возможных объектов m типа M . [примечание 4]
  • Возвращаемое значение всегда является константным выражением.
M :: is_always_exhaustive ( ) bool
  • Возвращает true только если m. is_exhaustive ( ) равно true для всех возможных объектов m типа M . [примечание 5]
  • Возвращаемое значение всегда является константным выражением.
M :: is_always_strided ( ) bool
  • Возвращает true только если m. is_strided ( ) равно true для всех возможных объектов m типа M . [примечание 6]
  • Возвращаемое значение всегда является константным выражением.
  1. ↑ Отображение может возвращать false даже если условие выполняется. Для некоторых layout'ов может быть нецелесообразно эффективно определять, является ли layout уникальным.
  2. ↑ То же самое, что и выше, но в случае exhaustive layouts.
  3. ↑ То же самое, что и выше, но в случае strided layouts.
  4. ↑ Отображение может возвращать false даже если условие выполняется. Для некоторых layout mappings может быть нецелесообразно определять, является ли каждый экземпляр уникальным.
  5. ↑ То же самое, что и выше, но в случае exhaustive instances.
  6. ↑ То же самое, что и выше, но в случае strided instances.

Концепция

Для ограничений, используемых в std::layout_stride::mapping , определено следующее концептуальное описание (только для экспозиции).

template < class M >

concept /*layout-mapping-alike*/ = requires
{
requires /*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 ;

} ;
( только для демонстрации* )

Определяет минимальные ограничения применимости для требования LayoutMapping . Данная концепция проверяет, что предикатные функции маппинга признаков, описанные выше, существуют, являются константными выражениями и имеют возвращаемый тип bool .

/*is-extents*/ < E > является true тогда и только тогда, когда E является специализацией std::extents .

Стандартная библиотека

Следующие типы стандартной библиотеки удовлетворяют LayoutMapping требованиям:

отображение компоновки layout_left
(открытый класс-член шаблона std::layout_left )
отображение компоновки layout_right
(открытый класс-член шаблона std::layout_right )
отображение компоновки layout_stride
(открытый класс-член шаблона std::layout_stride )
отображение компоновки layout_left_padded
(открытый класс-член шаблона std::layout_left_padded<PaddingValue> )
отображение компоновки layout_right_padded
(открытый класс-член шаблона std::layout_right_padded<PaddingValue> )

Смотрите также