Loading...
Searching...
No Matches
Dune::Std::extents< IndexType, exts > Class Template Reference
Common » Utilities » C++ utilities and backports

Multidimensional index space with dynamic and static extents. More...

`#include <dune/common/std/extents.hh>`

Inheritance diagram for Dune::Std::extents< IndexType, exts >:

## Public Types

using | rank_type = std::size_t
using | index_type = IndexType
using | size_type = std::make_unsigned_t<index_type>

## Public Member Functions

extents constructors
constexpr | extents () noexcept=default
| The default constructor requires that all exts are not std::dynamic_extent.
template<class... IndexTypes, std::enable_if_t<(... &&std::is_convertible_v< IndexTypes, index_type >), int > = 0, std::enable_if_t<(sizeof...(IndexTypes)==rank()||sizeof...(IndexTypes)==rank_dynamic()), int > = 0, std::enable_if_t<(... &&std::is_nothrow_constructible_v< index_type, IndexTypes >), int > = 0>
constexpr | extents (IndexTypes... e) noexcept
| Set all extents by the given integral sequence [[pre: all static extents correspond to the given value e]].
template<class I, std::size_t N, std::enable_if_t< std::is_convertible_v< I, index_type >, int > = 0, std::enable_if_t<(N==rank()||N==rank_dynamic()), int > = 0>
constexpr | extents (const std::array< I, N > &e) noexcept
| Set all dynamic extents by the given integral array [[pre: all static extents correspond to the given values in e]].
template<class I, std::size_t N, std::enable_if_t< std::is_convertible_v< I, index_type >, int > = 0, std::enable_if_t<(N==rank()||N==rank_dynamic()), int > = 0, std::enable_if_t< std::is_nothrow_constructible_v< index_type, const I & >, int > = 0>
constexpr | extents (std::span< I, N > e) noexcept
| Set all dynamic extents by the given integral array [[pre: all static extents correspond to the given values in e]].
template<class I, std::size_t... e, std::enable_if_t<(sizeof...(e)==rank()), int > = 0, std::enable_if_t<((e==std::dynamic_extent||exts==std::dynamic_extent||e==exts) &&...), int > = 0>
constexpr | extents (const extents< I, e... > &other) noexcept

## Friends

template<class, std::size_t...>
class | extents
struct | layout_left
struct | layout_right
struct | layout_stride
template<class OtherIndexType, std::size_t... otherExts>
constexpr bool | operator== (const extents &a, const extents< OtherIndexType, otherExts... > &b) noexcept
| Compare two extents by their rank and all individual extents.

## Observers

[mdspan.extents.obs], observers of the multidimensional index space
static constexpr rank_type | rank () noexcept
| The total number of dimensions.
static constexpr rank_type | rank_dynamic () noexcept
| The number of dimensions with dynamic extent.
static constexpr std::size_t | static_extent (rank_type r) noexcept
| Return the static extent of dimension r or std::dynamic_extent.
constexpr index_type | extent (rank_type r) const noexcept
| Return the extent of dimension i.

## Detailed Description

template<class IndexType, std::size_t... exts>
class Dune::Std::extents< IndexType, exts >

Multidimensional index space with dynamic and static extents.

This class template represents a multidimensional index space of rank equal to sizeof...(exts). Each extent might be specified as a template parameter or as a dynamic parameter in the constructor.

Template Parameters

  IndexType | An integral type other than bool
  exts... | Each element of exts is either std::dynamic_extent or a representable value of type IndexType.

## Member Typedef Documentation

## index_type

template<class IndexType, std::size_t... exts>

using Dune::Std::extents< IndexType, exts >::index_type = IndexType

## rank_type

template<class IndexType, std::size_t... exts>

using Dune::Std::extents< IndexType, exts >::rank_type = std::size_t

## size_type

template<class IndexType, std::size_t... exts>

using Dune::Std::extents< IndexType, exts >::size_type = std::make_unsigned_t<index_type>

## Constructor & Destructor Documentation

## extents() [1/5]

template<class IndexType, std::size_t... exts>

Dune::Std::extents< IndexType, exts >::extents | ( |  | ) |

constexpr default noexcept

The default constructor requires that all exts are not std::dynamic_extent.

## extents() [2/5]

template<class IndexType, std::size_t... exts>
template<class... IndexTypes, std::enable_if_t<(... &&std::is_convertible_v< IndexTypes, index_type >), int > = 0, std::enable_if_t<(sizeof...(IndexTypes)==rank()||sizeof...(IndexTypes)==rank_dynamic()), int > = 0, std::enable_if_t<(... &&std::is_nothrow_constructible_v< index_type, IndexTypes >), int > = 0>

Dune::Std::extents< IndexType, exts >::extents | ( | IndexTypes... | e | ) |

inline explicit constexpr noexcept

Set all extents by the given integral sequence [[pre: all static extents correspond to the given value e]].

## extents() [3/5]

template<class IndexType, std::size_t... exts>
template<class I, std::size_t N, std::enable_if_t< std::is_convertible_v< I, index_type >, int > = 0, std::enable_if_t<(N==rank()||N==rank_dynamic()), int > = 0>

Dune::Std::extents< IndexType, exts >::extents | ( | const std::array< I, N > & | e | ) |

inline constexpr noexcept

Set all dynamic extents by the given integral array [[pre: all static extents correspond to the given values in e]].

## extents() [4/5]

template<class IndexType, std::size_t... exts>
template<class I, std::size_t N, std::enable_if_t< std::is_convertible_v< I, index_type >, int > = 0, std::enable_if_t<(N==rank()||N==rank_dynamic()), int > = 0, std::enable_if_t< std::is_nothrow_constructible_v< index_type, const I & >, int > = 0>

Dune::Std::extents< IndexType, exts >::extents | ( | std::span< I, N > | e | ) |

inline constexpr noexcept

Set all dynamic extents by the given integral array [[pre: all static extents correspond to the given values in e]].

## extents() [5/5]

template<class IndexType, std::size_t... exts>
template<class I, std::size_t... e, std::enable_if_t<(sizeof...(e)==rank()), int > = 0, std::enable_if_t<((e==std::dynamic_extent||exts==std::dynamic_extent||e==exts) &&...), int > = 0>

Dune::Std::extents< IndexType, exts >::extents | ( | const extents< I, e... > & | other | ) |

inline constexpr noexcept

## Member Function Documentation

## extent()

template<class IndexType, std::size_t... exts>

index_type Dune::Std::extents< IndexType, exts >::extent | ( | rank_type | r | ) | const

inline constexpr noexcept

Return the extent of dimension i.

## rank()

template<class IndexType, std::size_t... exts>

constexpr rank_type Dune::Std::extents< IndexType, exts >::rank | ( |  | ) |

inline static constexpr noexcept

The total number of dimensions.

## rank_dynamic()

template<class IndexType, std::size_t... exts>

constexpr rank_type Dune::Std::extents< IndexType, exts >::rank_dynamic | ( |  | ) |

inline static constexpr noexcept

The number of dimensions with dynamic extent.

## static_extent()

template<class IndexType, std::size_t... exts>

constexpr std::size_t Dune::Std::extents< IndexType, exts >::static_extent | ( | rank_type | r | ) |

inline static constexpr noexcept

Return the static extent of dimension r or std::dynamic_extent.

## Friends And Related Symbol Documentation

## extents

template<class IndexType, std::size_t... exts>
template<class, std::size_t...>

friend class extents

friend

## layout_left

template<class IndexType, std::size_t... exts>

friend struct layout_left

friend

## layout_right

template<class IndexType, std::size_t... exts>

friend struct layout_right

friend

## layout_stride

template<class IndexType, std::size_t... exts>

friend struct layout_stride

friend

## operator==

template<class IndexType, std::size_t... exts>
template<class OtherIndexType, std::size_t... otherExts>

bool operator== | ( | const extents< IndexType, exts > & | a,
|  | const extents< OtherIndexType, otherExts... > & | b )

friend

Compare two extents by their rank and all individual extents.

The documentation for this class was generated from the following file:

- extents.hh