24
Containers library
[containers]
24.7
Views
[views]
24.7.3
Multidimensional access
[views.multidim]
24.7.3.3
Class template
extents
[mdspan.extents]
24.7.3.3.1
Overview
[mdspan.extents.overview]
The class template
extents
represents a multidimensional index space of rank equal to
sizeof
.
.
.
(
Extents
)
.
In subclause (
[views]
),
extents
is used synonymously with multidimensional index space
.
namespace
std
{
template
<
class
IndexType, size_t
.
.
.
Extents
>
class
extents
{
public
:
using
index_type
=
IndexType;
using
size_type
=
make_unsigned_t
<
index_type
>
;
using
rank_type
=
size_t;
//
[mdspan.
extents.
obs]
, observers of the multidimensional index space
static
constexpr
rank_type rank
(
)
noexcept
{
return
sizeof
.
.
.
(
Extents
)
;
}
static
constexpr
rank_type rank_dynamic
(
)
noexcept
{
return
dynamic-index
(
rank
(
)
)
;
}
static
constexpr
size_t static_extent
(
rank_type
)
noexcept
;
constexpr
index_type extent
(
rank_type
)
const
noexcept
;
//
[mdspan.
extents.
cons]
, constructors
constexpr
extents
(
)
noexcept
=
default
;
template
<
class
OtherIndexType, size_t
.
.
.
OtherExtents
>
constexpr
explicit
(
see below
)
extents
(
const
extents
<
OtherIndexType, OtherExtents
.
.
.
>
&
)
noexcept
;
template
<
class
.
.
.
OtherIndexTypes
>
constexpr
explicit
extents
(
OtherIndexTypes
.
.
.
)
noexcept
;
template
<
class
OtherIndexType, size_t N
>
constexpr
explicit
(
N
!
=
rank_dynamic
(
)
)
extents
(
span
<
OtherIndexType, N
>
)
noexcept
;
template
<
class
OtherIndexType, size_t N
>
constexpr
explicit
(
N
!
=
rank_dynamic
(
)
)
extents
(
const
array
<
OtherIndexType, N
>
&
)
noexcept
;
//
[mdspan.
extents.
cmp]
, comparison operators
template
<
class
OtherIndexType, size_t
.
.
.
OtherExtents
>
friend
constexpr
bool
operator
=
=
(
const
extents
&
,
const
extents
<
OtherIndexType, OtherExtents
.
.
.
>
&
)
noexcept
;
//
[mdspan.
extents.
expo]
, exposition-only helpers
constexpr
size_t
fwd-prod-of-extents
(
rank_type
)
const
noexcept
;
//
exposition only
constexpr
size_t
rev-prod-of-extents
(
rank_type
)
const
noexcept
;
//
exposition only
template
<
class
OtherIndexType
>
static
constexpr
auto
index-cast
(
OtherIndexType
&
&
)
noexcept
;
//
exposition only
private
:
static
constexpr
rank_type
dynamic-index
(
rank_type
)
noexcept
;
//
exposition only
static
constexpr
rank_type
dynamic-index-inv
(
rank_type
)
noexcept
;
//
exposition only
array
<
index_type, rank_dynamic
(
)
>
dynamic-extents
{
}
;
//
exposition only
}
;
template
<
class
.
.
.
Integrals
>
explicit
extents
(
Integrals
.
.
.
)
-
>
see below
;
}
1
#
Mandates
:
(1.1)
IndexType
is a signed or unsigned integer type, and
(1.2)
each element of
Extents
is either equal to
dynamic_
extent
, or is representable as a value of type
IndexType
.
2
#
Each specialization of
extents
models
regular
and is trivially copyable
.
3
#
Let
E
r
be the
r
th
element of
Extents
.
E
r
is a
dynamic extent
if it is equal to
dynamic_
extent
, otherwise
E
r
is a
static extent
.
Let
D
r
be the value of
dynamic-extents
[
dynamic-index
(
r
)
]
if
E
r
is a dynamic extent, otherwise
E
r
.
4
#
The
r
th
interval of the multidimensional index space represented by an
extents
object is
[
0
,
D
r
)
.