36template<
typename T, types::
size_t extent>
39template<
typename T, types::
size_t extent>
42 : public
meta::EnableView<
Span<T, extent>>
43 , public
meta::EnableBorrowedContainer<
Span<T, extent>>
44 , public
util::AddMemberGet<
Span<T, extent>> {
52 template<concepts::ContiguousIterator Iter>
58 template<concepts::ContiguousIterator Iter, concepts::SizedSentinelFor<Iter> Sent>
65 template<types::
size_t size>
66 requires(
size == extent)
67 constexpr Span(T (&array)[
size]) : m_data(array) {}
69 template<concepts::QualificationConvertibleTo<T> U, types::
size_t size>
70 requires(
size == extent)
73 template<
typename U, types::
size_t size>
77 template<concepts::ContiguousContainer Con>
85 template<concepts::QualificationConvertibleTo<T> U, types::
size_t other_extent>
86 requires((other_extent ==
dynamic_extent || extent == other_extent))
95 constexpr auto begin() const -> T* {
return data(); }
96 constexpr auto end() const -> T* {
return data() + extent; }
98 constexpr auto front() const -> T&
104 constexpr auto back() const -> T& requires(extent > 0) {
return *(
end() - 1); }
107 if (index >= extent) {
110 return (*
this)[index];
115 return data()[index];
118 constexpr auto data() const -> T* {
122 constexpr auto size() const ->
types::
size_t {
return extent; }
125 [[nodiscard]]
constexpr auto empty() const ->
bool {
return extent == 0; }
128 if (
count > extent) {
135 if (
count > extent) {
142 if (offset > extent) {
145 return Span<T> {
data() + offset, extent - offset };
149 if (offset +
count > extent) {
155 template<types::
size_t count>
156 requires(
count <= extent)
161 template<types::
size_t count>
162 requires(
count <= extent)
167 template<types::
size_t offset, types::
size_t count = dynamic_extent>
171 return Span<T, extent - offset> {
data() + offset,
end() };
177 template<
typename U = meta::RemoveCV<T>>
181 [](
auto const&... args) {
200 template<concepts::ContiguousIterator It, concepts::SizedSentinelFor<It> Sent>
207 template<types::
size_t index>
208 requires(index < extent)
214 template<types::
size_t index>
215 requires(index < extent)
225 template<types::
size_t index>
226 requires(index < extent)
231 T* m_data {
nullptr };
234template<
typename T, types::
size_t size>
237template<
typename T, types::
size_t size>
240template<
typename T, types::
size_t size>
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition optional_forward_declaration.h:5
Definition span_forward_declaration.h:10
constexpr other_extent const & other
Definition span_fixed_size.h:88
constexpr Span(Con &&container)
Definition span_fixed_size.h:81
constexpr auto data() const -> T *
Definition span_fixed_size.h:118
constexpr Span(Iter it, Sent sent)
Definition span_fixed_size.h:61
constexpr auto size() const -> types::size_t
Definition span_fixed_size.h:122
constexpr friend auto tag_invoke(types::Tag< tuple_element >, types::InPlaceType< Span >, Constexpr< index >) -> InPlaceType< T >
Definition span_fixed_size.h:209
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, Constexpr< index >, Span self) -> T &
Definition span_fixed_size.h:227
constexpr friend auto operator<=>(Span a, Span b)
Definition span_fixed_size.h:194
constexpr friend auto tag_invoke(types::Tag< container::reconstruct >, InPlaceType< Span >, It first, Sent last) -> Span< T >
Definition span_fixed_size.h:202
constexpr Span(vocab::Array< U, size > &array)
Definition span_fixed_size.h:71
constexpr auto back() const -> T &requires(extent > 0)
Definition span_fixed_size.h:104
constexpr auto first() const
Definition span_fixed_size.h:157
constexpr auto last() const
Definition span_fixed_size.h:163
constexpr Span(vocab::Array< U, size > const &array)
Definition span_fixed_size.h:75
constexpr auto front() const -> T &requires(extent > 0)
Definition span_fixed_size.h:98
T Element
Definition span_fixed_size.h:46
constexpr auto end() const -> T *
Definition span_fixed_size.h:96
constexpr friend auto tag_invoke(types::Tag< tuple_size >, types::InPlaceType< Span >) -> types::size_t
Definition span_fixed_size.h:221
constexpr auto subspan(types::size_t offset, types::size_t count) const -> Optional< Span< T > >
Definition span_fixed_size.h:148
constexpr auto operator=(Span const &) -> Span &=default
constexpr Span(Span const &)=default
constexpr auto to_owned() const -> Array< U, extent >
Definition span_fixed_size.h:179
constexpr auto operator[](types::size_t index) const -> T &requires(extent > 0)
Definition span_fixed_size.h:113
constexpr auto at(types::size_t index) const -> vocab::Optional< T & >
Definition span_fixed_size.h:106
constexpr auto begin() const -> T *
Definition span_fixed_size.h:95
constexpr auto first(types::size_t count) const -> Optional< Span< T > >
Definition span_fixed_size.h:127
constexpr friend auto operator==(Span a, Span b) -> bool requires(concepts::EqualityComparable< T >)
Definition span_fixed_size.h:188
constexpr Span(Iter first, types::size_t count)
Definition span_fixed_size.h:54
constexpr auto empty() const -> bool
Definition span_fixed_size.h:125
constexpr friend auto tag_invoke(types::Tag< tuple_element >, types::InPlaceType< Span const >, Constexpr< index >) -> InPlaceType< T >
Definition span_fixed_size.h:216
constexpr auto subspan(types::size_t offset) const -> Optional< Span< T > >
Definition span_fixed_size.h:141
constexpr auto size_bytes() const -> types::size_t
Definition span_fixed_size.h:123
constexpr auto last(types::size_t count) const -> Optional< Span< T > >
Definition span_fixed_size.h:134
constexpr auto subspan() const
Definition span_fixed_size.h:169
constexpr Span(T(&array)[size])
Definition span_fixed_size.h:67
Definition borrowed_container.h:8
Definition operations.h:99
Definition operations.h:34
Definition language.h:110
Definition operations.h:75
Definition sized_container.h:8
constexpr auto size
Definition size.h:54
constexpr auto data
Definition data.h:51
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 to_address
Definition to_address.h:22
constexpr auto apply(F &&f, Tup &&tuple) -> decltype(detail::apply_impl(meta::MakeIndexSequence< meta::TupleSize< Tup > > {}, util::forward< F >(f), util::forward< Tup >(tuple)))
Definition apply.h:22
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
constexpr auto size
Definition size.h:54
constexpr auto data
Definition data.h:51
constexpr auto count
Definition count.h:37
constexpr auto end
Definition end.h:47
Definition in_place_type.h:5
Definition span_fixed_size.h:37
constexpr auto data() -> T *
Definition array.h:75