15 template<
class Layout,
class Mapping>
16 concept IsMappingOf = concepts::SameAs<typename Layout::template Mapping<typename Mapping::ExtentsType>, Mapping>;
19 concept LayoutMappingAlike =
requires {
20 requires concepts::Extents<typename M::ExtentsType>;
21 { M::is_always_strided() } -> concepts::SameAs<bool>;
22 { M::is_always_exhaustive() } -> concepts::SameAs<bool>;
23 { M::is_always_unique() } -> concepts::SameAs<bool>;
24 Constexpr<M::is_always_strided()>::value;
25 Constexpr<M::is_always_exhaustive()>::value;
26 Constexpr<M::is_always_unique()>::value;
30template<
typename Extents>
48 template<
typename OtherSizeType>
55 template<
typename OtherSizeType>
62 template<detail::LayoutMappingAlike Str
idedLayoutMapping>
64 StridedLayoutMapping::is_always_unique() && StridedLayoutMapping::is_always_strided())
66 (detail::IsMappingOf<LayoutLeft, StridedLayoutMapping> ||
67 detail::IsMappingOf<LayoutRight, StridedLayoutMapping> ||
68 detail::IsMappingOf<LayoutStride, StridedLayoutMapping>) )
69 Mapping(StridedLayoutMapping
const& other)
72 m_strides[d] = other.stride(d);
92 template<
typename... Indices>
94 constexpr auto operator()(Indices... indices)
const ->
SizeType {
104 constexpr static auto is_unique() ->
bool {
return true; }
111 template<
typename OtherExtents>
Definition layout_stride.h:31
static constexpr auto rank() -> size_t
Definition extents.h:55
size_t RankType
Definition extents.h:53
T SizeType
Definition extents.h:52
constexpr auto is_exhaustive() const -> bool
Definition layout_stride.h:105
constexpr Mapping(ExtentsType const &extents)
Definition layout_stride.h:46
typename ExtentsType::RankType RankType
Definition layout_stride.h:35
static constexpr auto is_strided() -> bool
Definition layout_stride.h:106
auto operator=(Mapping const &) -> Mapping &=default
typename ExtentsType::SizeType SizeType
Definition layout_stride.h:34
LayoutStride LayoutType
Definition layout_stride.h:36
constexpr auto extents() const -> ExtentsType const &
Definition layout_stride.h:78
static constexpr auto is_always_exhaustive() -> bool
Definition layout_stride.h:101
constexpr auto required_span_size() const -> SizeType
Definition layout_stride.h:81
constexpr auto stride(RankType i) const -> SizeType
Definition layout_stride.h:108
constexpr Mapping(ExtentsType const &extents, Span< OtherSizeType, rank > strides)
Definition layout_stride.h:51
Mapping(Mapping const &)=default
static constexpr auto is_always_unique() -> bool
Definition layout_stride.h:100
Extents ExtentsType
Definition layout_stride.h:33
static constexpr auto is_always_strided() -> bool
Definition layout_stride.h:102
constexpr Mapping(ExtentsType const &extents, Array< OtherSizeType, rank > const &strides)
Definition layout_stride.h:58
static constexpr auto is_unique() -> bool
Definition layout_stride.h:104
constexpr auto strides() const -> Array< SizeType, rank >
Definition layout_stride.h:79
Mapping(Mapping &&)=default
Definition span_forward_declaration.h:10
Definition operations.h:11
Definition operations.h:99
constexpr auto range
Definition range.h:22
constexpr auto copy
Definition copy.h:30
constexpr auto unpack
Definition unpack.h:24
constexpr auto size
Definition size.h:62
Definition extents_forward_declaration.h:23