23
Containers library
[containers]
23.7
Views
[views]
23.7.3
Multidimensional access
[views.multidim]
23.7.3.4
Layout mapping
[mdspan.layout]
23.7.3.4.7
Class template
layout_
stride::mapping
[mdspan.layout.stride]
23.7.3.4.7.1
Overview
[mdspan.layout.stride.overview]
1
#
layout_
stride
provides a layout mapping where the strides are user-defined
.
🔗
namespace
std
{
template
<
class
Extents
>
class
layout_stride
::
mapping
{
public
:
using
extents_type
=
Extents;
using
index_type
=
extents_type
::
index_type;
using
size_type
=
extents_type
::
size_type;
using
rank_type
=
extents_type
::
rank_type;
using
layout_type
=
layout_stride;
private
:
static
constexpr
rank_type
rank_
=
extents_type
::
rank
(
)
;
//
exposition only
public
:
//
[mdspan.
layout.
stride.
cons]
, constructors
constexpr
mapping
(
)
noexcept
;
constexpr
mapping
(
const
mapping
&
)
noexcept
=
default
;
template
<
class
OtherIndexType
>
constexpr
mapping
(
const
extents_type
&
, span
<
OtherIndexType,
rank_
>
)
noexcept
;
template
<
class
OtherIndexType
>
constexpr
mapping
(
const
extents_type
&
,
const
array
<
OtherIndexType,
rank_
>
&
)
noexcept
;
template
<
class
StridedLayoutMapping
>
constexpr
explicit
(
see below
)
mapping
(
const
StridedLayoutMapping
&
)
noexcept
;
constexpr
mapping
&
operator
=
(
const
mapping
&
)
noexcept
=
default
;
//
[mdspan.
layout.
stride.
obs]
, observers
constexpr
const
extents_type
&
extents
(
)
const
noexcept
{
return
extents_
;
}
constexpr
array
<
index_type,
rank_
>
strides
(
)
const
noexcept
{
return
strides_
;
}
constexpr
index_type required_span_size
(
)
const
noexcept
;
template
<
class
.
.
.
Indices
>
constexpr
index_type
operator
(
)
(
Indices
.
.
.
)
const
noexcept
;
static
constexpr
bool
is_always_unique
(
)
noexcept
{
return
true
;
}
static
constexpr
bool
is_always_exhaustive
(
)
noexcept
;
static
constexpr
bool
is_always_strided
(
)
noexcept
{
return
true
;
}
static
constexpr
bool
is_unique
(
)
noexcept
{
return
true
;
}
constexpr
bool
is_exhaustive
(
)
const
noexcept
;
static
constexpr
bool
is_strided
(
)
noexcept
{
return
true
;
}
constexpr
index_type
stride
(
rank_type i
)
const
noexcept
{
return
strides_
[
i
]
;
}
template
<
class
OtherMapping
>
friend
constexpr
bool
operator
=
=
(
const
mapping
&
,
const
OtherMapping
&
)
noexcept
;
private
:
extents_type
extents_
{
}
;
//
exposition only
array
<
index_type,
rank_
>
strides_
{
}
;
//
exposition only
//
[mdspan.
sub.
map]
,
submdspan
mapping specialization
template
<
class
.
.
.
SliceSpecifiers
>
constexpr
auto
submdspan-mapping-impl
(
SliceSpecifiers
.
.
.
)
const
//
exposition only
-
>
see below
;
template
<
class
.
.
.
SliceSpecifiers
>
friend
constexpr
auto
submdspan_mapping
(
const
mapping
&
src, SliceSpecifiers
.
.
.
slices
)
{
return
src
.
submdspan-mapping-impl
(
slices
.
.
.
)
;
}
}
;
}
2
#
If
Extents
is not a specialization of
extents
, then the program is ill-formed
.
3
#
layout_
stride
::
mapping
<
E
>
is a trivially copyable type that models
regular
for each
E
.
4
#
Mandates
: If
Extents
::
rank_
dynamic
(
)
=
=
0
is
true
, then the size of the multidimensional index space
Extents
(
)
is representable as a value of type
typename
Extents
::
index_
type
.