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&
111 if (index >= extent) {
114 return (*
this)[index];
121 return data()[index];
124 constexpr auto data() const -> T* {
return m_data; }
126 constexpr auto size() const ->
types::
size_t {
return extent; }
129 [[nodiscard]]
constexpr auto empty() const ->
bool {
return extent == 0; }
132 if (
count > extent) {
139 if (
count > extent) {
146 if (offset > extent) {
149 return Span<T> {
data() + offset, extent - offset };
153 if (offset +
count > extent) {
159 template<types::
size_t count>
160 requires(
count <= extent)
165 template<types::
size_t count>
166 requires(
count <= extent)
171 template<types::
size_t offset, types::
size_t count = dynamic_extent>
175 return Span<T, extent - offset> {
data() + offset,
end() };
181 template<
typename U = meta::RemoveCV<T>>
185 [](
auto const&... args) {
204 template<concepts::ContiguousIterator It, concepts::SizedSentinelFor<It> Sent>
211 template<types::
size_t index>
212 requires(index < extent)
218 template<types::
size_t index>
219 requires(index < extent)
229 template<types::
size_t index>
230 requires(index < extent)
235 T* m_data {
nullptr };
238template<
typename T, types::
size_t size>
241template<
typename T, types::
size_t size>
244template<
typename T, types::
size_t size>
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition optional_forward_declaration.h:5
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:124
constexpr Span(Iter it, Sent sent)
Definition span_fixed_size.h:61
constexpr auto size() const -> types::size_t
Definition span_fixed_size.h:126
constexpr friend auto tag_invoke(types::Tag< tuple_element >, types::InPlaceType< Span >, Constexpr< index >) -> InPlaceType< T >
Definition span_fixed_size.h:213
constexpr friend auto tag_invoke(types::Tag< util::get_in_place >, Constexpr< index >, Span self) -> T &
Definition span_fixed_size.h:231
constexpr friend auto operator<=>(Span a, Span b)
Definition span_fixed_size.h:198
constexpr friend auto tag_invoke(types::Tag< container::reconstruct >, InPlaceType< Span >, It first, Sent last) -> Span< T >
Definition span_fixed_size.h:206
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:161
constexpr auto last() const
Definition span_fixed_size.h:167
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:225
constexpr auto subspan(types::size_t offset, types::size_t count) const -> Optional< Span< T > >
Definition span_fixed_size.h:152
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:183
constexpr auto operator[](types::size_t index) const -> T &requires(extent > 0)
Definition span_fixed_size.h:117
constexpr auto at(types::size_t index) const -> vocab::Optional< T & >
Definition span_fixed_size.h:110
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:131
constexpr friend auto operator==(Span a, Span b) -> bool requires(concepts::EqualityComparable< T >)
Definition span_fixed_size.h:192
constexpr Span(Iter first, types::size_t count)
Definition span_fixed_size.h:54
constexpr auto empty() const -> bool
Definition span_fixed_size.h:129
constexpr friend auto tag_invoke(types::Tag< tuple_element >, types::InPlaceType< Span const >, Constexpr< index >) -> InPlaceType< T >
Definition span_fixed_size.h:220
constexpr auto subspan(types::size_t offset) const -> Optional< Span< T > >
Definition span_fixed_size.h:145
constexpr auto size_bytes() const -> types::size_t
Definition span_fixed_size.h:127
constexpr auto last(types::size_t count) const -> Optional< Span< T > >
Definition span_fixed_size.h:138
constexpr auto subspan() const
Definition span_fixed_size.h:173
constexpr Span(T(&array)[size])
Definition span_fixed_size.h:67
Definition span_forward_declaration.h:10
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:62
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:62
constexpr auto data
Definition data.h:51
constexpr auto count
Definition count.h:37
constexpr auto end
Definition end.h:55
Definition in_place_type.h:5
constexpr auto data() -> T *
Definition array.h:75