26template<
typename T, types::
size_t extent>
32 if (index >= extent) {
35 return (*
this)[index];
38 if (index >= extent) {
41 return (*
this)[index];
46 return begin()[index];
50 return begin()[index];
58 constexpr auto front() const -> T const&
64 constexpr auto back() -> T&
69 constexpr auto back() const -> T const&
79 constexpr auto begin() const -> T const* {
return data(); }
81 constexpr auto end() -> T* {
return data() + extent; }
82 constexpr auto end() const -> T const* {
return data() + extent; }
84 constexpr auto empty() const ->
bool {
return extent == 0; }
85 constexpr auto size()
const {
return extent; }
86 constexpr auto max_size()
const {
return extent; }
88 constexpr void fill(T
const& value)
94 constexpr auto span() {
return Span { *
this }; }
95 constexpr auto span()
const {
return Span { *
this }; }
109 template<types::
size_t count>
110 requires(
count <= extent)
115 template<types::
size_t count>
116 requires(count <= extent)
121 template<types::
size_t count>
122 requires(count <= extent)
127 template<types::
size_t count>
128 requires(count <= extent)
133 template<types::
size_t offset, types::
size_t count = dynamic_extent>
139 template<types::
size_t offset, types::
size_t count = dynamic_extent>
145 template<types::
size_t index>
146 requires(index < extent)
147 constexpr auto get() & -> T& {
148 return (*
this)[index];
151 template<types::
size_t index>
152 requires(index < extent)
153 constexpr auto get()
const& -> T
const& {
154 return (*
this)[index];
157 template<types::
size_t index>
158 requires(index < extent)
159 constexpr auto get() && -> T&& {
160 return util::move((*
this)[index]);
163 template<types::
size_t index>
164 requires(index < extent)
165 constexpr auto get()
const&& -> T
const&& {
166 return util::move((*
this)[index]);
196 template<concepts::ContiguousIterator It, concepts::SizedSentinelFor<It> Sent>
203 template<types::
size_t index>
204 requires(index < extent)
210 template<types::
size_t index>
211 requires(index < extent)
217 template<concepts::DecaySameAs<Array> Self, types::
size_t index>
218 requires(index < extent)
229 constexpr auto data() -> T* {
return nullptr; }
230 constexpr auto data() const -> T const* {
return nullptr; }
233 constexpr auto begin() const -> T const* {
return data(); }
236 constexpr auto end() const -> T const* {
return data(); }
247 constexpr auto empty() const ->
bool {
return false; }
248 constexpr auto size()
const {
return 0ZU; }
256 constexpr auto span()
const {
return Span { *
this }; }
268 return strong_ordering::equal;
283 template<concepts::ContiguousIterator It, concepts::SizedSentinelFor<It> Sent>
291template<
typename T,
typename... U>
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition optional_forward_declaration.h:5
Definition span_forward_declaration.h:10
This concept requires that the conversion from From to To would not result in converting a derived ty...
Definition operations.h:108
Definition operations.h:40
constexpr auto swap_ranges
Definition swap_ranges.h:31
constexpr auto fill
Definition fill.h:26
constexpr auto equal
Definition equal.h:46
constexpr auto compare
Definition compare.h:40
std::size_t size_t
Definition size_t.h:12
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
constexpr auto forward_like(U &&value) -> decltype(auto)
Definition forward_like.h:8
void unreachable()
Definition unreachable.h:4
Array(T, U...) -> Array< T, 1+sizeof...(U)>
Span(Iter, SentOrSize) -> Span< meta::RemoveReference< meta::IteratorReference< Iter > > >
constexpr auto nullopt
Definition nullopt.h:15
constexpr auto dynamic_extent
Definition span_forward_declaration.h:7
Definition zstring_parser.h:9
constexpr auto count
Definition count.h:37
Definition in_place_type.h:5
Definition span_fixed_size.h:37
constexpr auto operator[](types::size_t) const -> T const &
Definition array.h:242
constexpr auto begin() -> T *
Definition array.h:78
constexpr auto data() const -> T const *
Definition array.h:76
constexpr auto first(types::size_t count) const
Definition array.h:98
constexpr auto last() const
Definition array.h:129
constexpr auto at(types::size_t index) -> Optional< T & >
Definition array.h:31
constexpr friend auto operator<=>(Array const &, Array const &)
Definition array.h:265
constexpr auto max_size() const
Definition array.h:86
constexpr auto operator[](types::size_t index) -> T &
Definition array.h:44
constexpr auto operator[](types::size_t index) const -> T const &
Definition array.h:48
constexpr auto subspan(types::size_t offset, types::size_t count)
Definition array.h:106
constexpr auto subspan(types::size_t offset, types::size_t count) const
Definition array.h:107
constexpr auto begin() const -> T const *
Definition array.h:233
constexpr auto empty() const -> bool
Definition array.h:247
constexpr auto size() const
Definition array.h:248
constexpr friend void tag_invoke(types::Tag< util::swap >, Array &a, Array &b)
Definition array.h:182
constexpr auto data() -> T *
Definition array.h:75
constexpr auto span()
Definition array.h:255
constexpr auto at(types::size_t) const -> Optional< T const & >
Definition array.h:227
constexpr auto max_size() const
Definition array.h:249
constexpr auto back() -> T &requires(extent > 0)
Definition array.h:64
constexpr auto subspan()
Definition array.h:135
constexpr auto at(types::size_t) -> Optional< T & >
Definition array.h:226
constexpr friend auto operator==(Array const &, Array const &) -> bool requires(concepts::EqualityComparable< T >)
Definition array.h:259
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_element >, types::InPlaceType< Array >, Constexpr< index >) -> InPlaceType< T >
Definition array.h:205
constexpr auto size() const
Definition array.h:85
constexpr friend auto tag_invoke(types::Tag< container::reconstruct >, InPlaceType< Array >, It first, Sent last) -> Span< T >
Definition array.h:198
constexpr auto end() const -> T const *
Definition array.h:82
constexpr auto at(types::size_t index) const -> Optional< T const & >
Definition array.h:37
constexpr auto first(types::size_t count)
Definition array.h:97
constexpr auto get() const &-> T const &
Definition array.h:153
constexpr void fill(T const &value)
Definition array.h:88
constexpr auto back() const -> T const &requires(extent > 0)
Definition array.h:69
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, Constexpr< index >, Self &&self) -> decltype(auto)
Definition array.h:219
constexpr auto data() -> T *
Definition array.h:229
constexpr auto get() const &&-> T const &&
Definition array.h:165
constexpr auto empty() const -> bool
Definition array.h:84
constexpr void fill(T const &)
Definition array.h:251
constexpr auto subspan(types::size_t offset)
Definition array.h:103
constexpr auto get() &&-> T &&
Definition array.h:159
constexpr auto end() -> T *
Definition array.h:81
constexpr friend void tag_invoke(types::Tag< util::swap >, Array &, Array &)
Definition array.h:271
constexpr auto end() -> T *
Definition array.h:235
T m_public_data[extent]
Definition array.h:29
constexpr auto begin() const -> T const *
Definition array.h:79
constexpr friend auto operator==(Array const &a, Array const &b) -> bool requires(concepts::EqualityComparable< T >)
Definition array.h:170
constexpr auto get() &-> T &
Definition array.h:147
constexpr auto data() const -> T const *
Definition array.h:230
constexpr auto last(types::size_t count) const
Definition array.h:101
constexpr auto first() const
Definition array.h:117
constexpr auto front() -> T &requires(extent > 0)
Definition array.h:53
constexpr auto operator[](types::size_t) -> T &
Definition array.h:238
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_element >, types::InPlaceType< Array const >, Constexpr< index >) -> InPlaceType< T const >
Definition array.h:212
constexpr auto subspan() const
Definition array.h:141
constexpr auto begin() -> T *
Definition array.h:232
constexpr auto span()
Definition array.h:94
constexpr auto span() const
Definition array.h:95
constexpr friend auto tag_invoke(types::Tag< vocab::tuple_size >, types::InPlaceType< Array >) -> types::size_t
Definition array.h:192
constexpr auto end() const -> T const *
Definition array.h:236
constexpr auto first()
Definition array.h:111
constexpr friend auto operator<=>(Array const &a, Array const &b)
Definition array.h:176
constexpr auto subspan(types::size_t offset) const
Definition array.h:104
constexpr friend auto tag_invoke(types::Tag< vocab::enable_generate_structed_bindings >, types::InPlaceType< Array >) -> bool
Definition array.h:188
constexpr auto span() const
Definition array.h:256
constexpr auto last()
Definition array.h:123
constexpr auto front() const -> T const &requires(extent > 0)
Definition array.h:58
constexpr auto last(types::size_t count)
Definition array.h:100