C++ named requirements: LayoutMapping (since C++23)
LayoutMapping controls the mapping of a multidimensional index to a one-dimensional offset to data handle in std:: mdspan .
Requirements
A type
M
satisfies
LayoutMapping
if it models
copyable
and
equality_comparable
, and the following are
true
:
- std:: is_nothrow_move_constructible_v < M >
- std:: is_nothrow_move_assignable_v < M >
- std:: is_nothrow_swappable_v < M >
And, given the following types and values, the expressions shown in the table below are valid and have the indicated semantics:
Legend
Type | Definition |
M
|
a layout mapping class |
Value | Definition |
m |
a value of type (possibly const-qualified)
M
|
i , j | packs of (possibly const-qualified) integers that are multidimensional indices in m. extents ( ) |
r | a (possibly const-qualified) rank index of typename M :: extents_type |
d_r | a pack of (possibly const-qualified) integers for which sizeof... ( d_r ) == M :: extents_type :: rank ( ) is true , the element at rank index r is equal to 1 , and all other elements are equal to 0 |
Member types
Name | Type | Requirements |
---|---|---|
M::extents_type
|
Specialization of class template std:: extents | |
M::index_type
|
typename M :: extents_type :: index_type | |
M::rank_type
|
typename M :: extents_type :: rank_type | |
M::layout_type
|
Layout mapping policy
MP
where
typename
MP
::
template
mapping
<
E
>
is
M
for some extents type
E
|
LayoutMappingPolicy
for which
M
is mapping type of
MP
|
Member functions and operators
Expression | Return type | Semantics |
---|---|---|
m. extents ( ) | const typename M :: extents_type & | Returns constant reference to associated multidimensional index space |
m ( i... ) | typename M :: index_type |
|
m. required_span_size ( ) | typename M :: index_type |
|
m. is_unique ( ) | bool | Returns true only if for every i and j where ( i ! = j || ... ) is true , m ( i... ) ! = m ( j... ) is true . [note 1] |
m. is_exhaustive ( ) | bool |
Returns
true
only if for all
k
in the range
[
0
,
m.
required_span_size
(
)
)
, there exists an
i
such that
m
(
i...
)
equals
k
.
[note 2]
|
m. is_strided ( ) | bool | Returns true only if for every rank index r of m. extents ( ) , there exists an integer s_r such that, for all i where ( i + d_r ) is a multidimensional index in m. extents ( ) , m ( ( i + d_r ) ... ) - m ( i... ) equals s_r . [note 3] |
m. stride ( r ) | typename M :: index_type |
|
M :: is_always_unique ( ) | bool |
|
M :: is_always_exhaustive ( ) | bool |
|
M :: is_always_strided ( ) | bool |
|
- ↑ A mapping can return false even if the condition is met. For certain layouts, it is possibly not feasible to determine efficiently whether the layout is unique.
- ↑ Same as above, but in the case of exhaustive layouts.
- ↑ Same as above, but in the case of strided layouts.
- ↑ A mapping can return false even if the condition is met. For certain layout mappings, it is possibly not feasible to determine whether every instance is unique.
- ↑ Same as above, but in the case of exhaustive instances.
- ↑ Same as above, but in the case of strided instances.
Standard library
The following standard library types satisfy LayoutMapping requirements:
a layout mapping of
layout_left
(public member class template of
std::layout_left
)
|
|
a layout mapping of
layout_right
(public member class template of
std::layout_right
)
|
|
a layout mapping of
layout_stride
(public member class template of
std::layout_stride
)
|
|
a layout mapping of
layout_left_padded
(public member class template of
std::layout_left_padded<PaddingValue>
)
|
|
a layout mapping of
layout_right_padded
(public member class template of
std::layout_right_padded<PaddingValue>
)
|