16template<
typename Element, concepts::Extents Extents, concepts::MDLayout<Extents> Layout = LayoutRight,
17 concepts::MDAccessor Accessor = DefaultAccessor<Element>>
23 using MappingType =
typename LayoutType::template Mapping<ExtentsType>;
44 template<
typename... OtherSizeTypes>
46 (
sizeof...(OtherSizeTypes) ==
rank() || ((
sizeof...(OtherSizeTypes) ==
rank_dynamic()) &&
52 template<
typename OtherSizeType,
size_t N>
58 template<
typename OtherSizeType,
size_t N>
66 : m_data_handle(
util::move(data_handle)), m_mapping(ext) {}
70 : m_data_handle(
util::move(data_handle)), m_mapping(
mapping) {}
75 template<
typename OtherElementType,
typename OtherExtents,
typename OtherLayout,
typename OtherAccessor>
87 template<
typename... OtherSizeTypes>
89 constexpr auto operator[](OtherSizeTypes... indices)
const ->
Reference {
90 auto index = m_mapping(ExtentsType::index_cast(util::move(indices))...);
91 DI_ASSERT(index < m_mapping.required_span_size());
92 return m_accessor.access(m_data_handle, index);
95 template<
typename OtherSizeType>
99 return (*
this)[util::as_const(indices[i])...];
103 template<
typename OtherSizeType>
106 return (*
this)[indices.span()];
109 template<
typename... OtherSizeTypes>
111 constexpr auto operator()(OtherSizeTypes... indices)
const ->
Reference {
112 auto index = m_mapping(ExtentsType::index_cast(util::move(indices))...);
113 DI_ASSERT(index < m_mapping.required_span_size());
114 return m_accessor.access(m_data_handle, index);
117 template<
typename OtherSizeType>
121 return (*
this)[util::as_const(indices[i])...];
125 template<
typename OtherSizeType>
128 return (*
this)[indices.span()];
136 return (*
this)(indices...);
141 constexpr auto size() const ->
size_t {
return extents().fwd_prod_of_extents(
rank()); }
142 constexpr auto empty() const ->
bool {
return size() == 0; }
149 constexpr static auto is_always_unique() ->
bool {
return MappingType::is_always_unique(); }
153 constexpr auto is_unique() const ->
bool {
return m_mapping.is_unique(); }
154 constexpr auto is_contiguous() const ->
bool {
return m_mapping.is_contiguous(); }
155 constexpr auto is_strided() const ->
bool {
return m_mapping.is_strided(); }
159 [[no_unique_address]]
DataHandle m_data_handle {};
164template<concepts::LanguageArray CArray>
168template<
typename Po
inter>
172template<
typename ElementType,
typename... integrals>
176template<typename ElementType, typename OtherSizeType,
size_t N>
179template<typename ElementType, typename OtherSizeType,
size_t N>
182template<typename ElementType, typename SizeType,
size_t... extents>
185template<class ElementType, class MappingType>
187 ->
MDSpan<ElementType, typename MappingType::ExtentsType, typename MappingType::LayoutType>;
189template<class MappingType, class AccessorType>
190MDSpan(typename AccessorType::DataHandle const&, MappingType const&, AccessorType const&)
191 ->
MDSpan<typename AccessorType::ElementType, typename MappingType::ExtentsType, typename MappingType::LayoutType,
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition extents_forward_declaration.h:11
static constexpr auto static_extent(size_t index) -> size_t
Definition extents.h:15
static constexpr auto rank() -> size_t
Definition extents.h:55
size_t RankType
Definition extents.h:53
static constexpr auto rank_dynamic() -> size_t
Definition extents.h:56
T SizeType
Definition extents.h:52
Accessor AccessorType
Definition mdspan.h:22
OtherExtents
Definition mdspan.h:80
constexpr explicit(N !=rank_dynamic()) MDSpan(DataHandle data_handle
MDSpan(MDSpan &&)=default
constexpr auto is_contiguous() const -> bool
Definition mdspan.h:154
typename AccessorType::Reference Reference
Definition mdspan.h:29
Extents ExtentsType
Definition mdspan.h:20
constexpr auto operator[](Array< OtherSizeType, rank()> const &indices) const -> Reference
Definition mdspan.h:105
typename AccessorType::DataHandle DataHandle
Definition mdspan.h:28
typename ExtentsType::SizeType SizeType
Definition mdspan.h:26
Layout LayoutType
Definition mdspan.h:21
Element ElementType
Definition mdspan.h:24
constexpr auto operator()(Array< OtherSizeType, rank()> const &indices) const -> Reference
Definition mdspan.h:127
constexpr auto data() const -> DataHandle const &
Definition mdspan.h:145
auto operator=(MDSpan const &) -> MDSpan &=default
static constexpr auto rank() -> RankType
Definition mdspan.h:31
static constexpr auto is_always_strided() -> bool
Definition mdspan.h:151
constexpr auto is_strided() const -> bool
Definition mdspan.h:155
static constexpr auto rank_dynamic() -> RankType
Definition mdspan.h:32
constexpr MDSpan(DataHandle data_handle, ExtentsType const &ext)
Definition mdspan.h:64
constexpr auto each() const
Definition mdspan.h:131
constexpr auto mapping() const -> MappingType const &
Definition mdspan.h:146
constexpr auto extent(RankType r) const -> SizeType
Definition mdspan.h:34
constexpr auto accessor() const -> AccessorType const &
Definition mdspan.h:147
constexpr auto is_unique() const -> bool
Definition mdspan.h:153
MDSpan(MDSpan const &)=default
OtherAccessor const & other
Definition mdspan.h:82
constexpr auto stride(RankType r) const -> SizeType
Definition mdspan.h:156
meta::RemoveCV< ElementType > ValueType
Definition mdspan.h:25
constexpr auto size() const -> size_t
Definition mdspan.h:141
constexpr auto extents() const -> ExtentsType const &
Definition mdspan.h:144
typename ExtentsType::RankType RankType
Definition mdspan.h:27
auto operator=(MDSpan &&) -> MDSpan &=default
OtherLayout
Definition mdspan.h:81
static constexpr auto is_always_unique() -> bool
Definition mdspan.h:149
constexpr MDSpan(DataHandle data_handle, MappingType const &mapping, AccessorType const &accessor)
Definition mdspan.h:72
constexpr auto empty() const -> bool
Definition mdspan.h:142
constexpr Span< OtherSizeType, N > exts
Definition mdspan.h:56
static constexpr auto static_extent(RankType r) -> size_t
Definition mdspan.h:33
constexpr MDSpan(DataHandle data_handle, MappingType const &mapping)
Definition mdspan.h:68
static constexpr auto is_always_contiguous() -> bool
Definition mdspan.h:150
typename LayoutType::template Mapping< ExtentsType > MappingType
Definition mdspan.h:23
Definition span_forward_declaration.h:10
Definition operations.h:11
Definition operations.h:99
Definition operations.h:24
constexpr auto cartesian_product
Definition cartesian_product.h:36
constexpr auto transform
Definition transform.h:28
constexpr auto range
Definition range.h:22
constexpr auto unpack
Definition unpack.h:24
constexpr auto uncurry
Definition uncurry.h:94
size_t usize
Definition integers.h:33
MDSpan(CArray &) -> MDSpan< meta::RemoveAllExtents< CArray >, Extents< size_t, meta::Extent< CArray, 0 > > >
detail::DextentsHelper< SizeType, meta::Repeat< Constexpr< dynamic_extent >, rank > >::Type Dextents
Definition dextents.h:19
Definition zstring_parser.h:9
Definition span_fixed_size.h:37