Iros
 
Loading...
Searching...
No Matches
constant_vector_interface.h
Go to the documentation of this file.
1#pragma once
2
21#include "di/meta/compare.h"
22#include "di/types/prelude.h"
25
26namespace di::container {
27template<typename Self, typename Value>
29private:
30 constexpr auto self() -> Self& { return static_cast<Self&>(*this); }
31 constexpr auto self() const -> Self const& { return static_cast<Self const&>(*this); }
32
33public:
34 constexpr auto size() const -> size_t { return vector::size(self()); }
35 constexpr auto size_bytes() const -> size_t { return vector::size_bytes(self()); }
36 [[nodiscard]] constexpr auto empty() const -> bool { return vector::empty(self()); }
37
38 constexpr auto begin() { return vector::begin(self()); }
39 constexpr auto begin() const { return vector::begin(self()); }
40
41 constexpr auto end() { return vector::end(self()); }
42 constexpr auto end() const { return vector::end(self()); }
43
44 constexpr auto front() { return vector::front(self()); }
45 constexpr auto front() const { return vector::front(self()); }
46
47 constexpr auto back() { return vector::back(self()); }
48 constexpr auto back() const { return vector::back(self()); }
49
50 constexpr auto at(size_t index) { return vector::at(self(), index); }
51 constexpr auto at(size_t index) const { return vector::at(self(), index); }
52
53 constexpr auto operator[](size_t index) -> decltype(auto) { return vector::lookup(self(), index); }
54 constexpr auto operator[](size_t index) const -> decltype(auto) { return vector::lookup(self(), index); }
55
56 constexpr auto iterator(size_t index) { return vector::iterator(self(), index); }
57 constexpr auto iterator(size_t index) const { return vector::iterator(self(), index); }
58 constexpr auto citerator(size_t index) const { return vector::iterator(self(), index); }
59
60 constexpr auto data() { return vector::data(self()); }
61 constexpr auto data() const { return vector::data(self()); }
62
63 constexpr auto first(size_t count) { return vector::first(self(), count); }
64 constexpr auto first(size_t count) const { return vector::first(self(), count); }
65
66 constexpr auto last(size_t count) { return vector::last(self(), count); }
67 constexpr auto last(size_t count) const { return vector::last(self(), count); }
68
69 constexpr auto subspan(size_t offset) { return vector::subspan(self(), offset); }
70 constexpr auto subspan(size_t offset) const { return vector::subspan(self(), offset); }
71 constexpr auto subspan(size_t offset, size_t count) { return vector::subspan(self(), offset, count); }
72 constexpr auto subspan(size_t offset, size_t count) const { return vector::subspan(self(), offset, count); }
73
74 template<size_t count>
75 constexpr auto first() {
76 return vector::first<count>(self());
77 }
78
79 template<size_t count>
80 constexpr auto first() const {
81 return vector::first<count>(self());
82 }
83
84 template<size_t count>
85 constexpr auto last() {
86 return vector::last<count>(self());
87 }
88
89 template<size_t count>
90 constexpr auto last() const {
91 return vector::last<count>(self());
92 }
93
94 template<size_t offset, size_t count = vocab::dynamic_extent>
95 constexpr auto subspan() {
96 return vector::subspan<offset, count>(self());
97 }
98
99 template<size_t offset, size_t count = vocab::dynamic_extent>
100 constexpr auto subspan() const {
101 return vector::subspan<offset, count>(self());
102 }
103
104private:
105 constexpr friend auto operator==(Self const& a, Self const& b) -> bool
107 {
108 return container::equal(a, b);
109 }
110
111 constexpr friend auto operator<=>(Self const& a, Self const& b)
113 {
114 return container::compare(a, b);
115 }
116
117 template<concepts::ContiguousIterator It, concepts::SizedSentinelFor<It> Sent>
121 return vocab::Span<Value>(util::move(first), util::move(last));
122 }
123};
124}
Definition constant_vector_interface.h:28
constexpr auto subspan(size_t offset, size_t count)
Definition constant_vector_interface.h:71
constexpr auto citerator(size_t index) const
Definition constant_vector_interface.h:58
constexpr friend auto operator<=>(Self const &a, Self const &b)
Definition constant_vector_interface.h:111
constexpr auto size() const -> size_t
Definition constant_vector_interface.h:34
constexpr auto first()
Definition constant_vector_interface.h:75
constexpr auto front() const
Definition constant_vector_interface.h:45
constexpr auto subspan(size_t offset, size_t count) const
Definition constant_vector_interface.h:72
constexpr auto begin() const
Definition constant_vector_interface.h:39
constexpr auto data() const
Definition constant_vector_interface.h:61
constexpr auto subspan(size_t offset) const
Definition constant_vector_interface.h:70
constexpr auto size_bytes() const -> size_t
Definition constant_vector_interface.h:35
constexpr auto last()
Definition constant_vector_interface.h:85
constexpr auto first(size_t count) const
Definition constant_vector_interface.h:64
constexpr auto first() const
Definition constant_vector_interface.h:80
constexpr auto data()
Definition constant_vector_interface.h:60
constexpr auto subspan()
Definition constant_vector_interface.h:95
constexpr auto subspan(size_t offset)
Definition constant_vector_interface.h:69
constexpr auto first(size_t count)
Definition constant_vector_interface.h:63
constexpr auto operator[](size_t index) const -> decltype(auto)
Definition constant_vector_interface.h:54
constexpr auto end()
Definition constant_vector_interface.h:41
constexpr auto back() const
Definition constant_vector_interface.h:48
constexpr auto iterator(size_t index)
Definition constant_vector_interface.h:56
constexpr friend auto operator==(Self const &a, Self const &b) -> bool requires(concepts::EqualityComparable< Value >)
Definition constant_vector_interface.h:105
constexpr auto end() const
Definition constant_vector_interface.h:42
constexpr auto front()
Definition constant_vector_interface.h:44
constexpr auto iterator(size_t index) const
Definition constant_vector_interface.h:57
constexpr auto empty() const -> bool
Definition constant_vector_interface.h:36
constexpr auto last(size_t count)
Definition constant_vector_interface.h:66
constexpr auto last() const
Definition constant_vector_interface.h:90
constexpr auto last(size_t count) const
Definition constant_vector_interface.h:67
constexpr auto at(size_t index) const
Definition constant_vector_interface.h:51
constexpr friend auto tag_invoke(types::Tag< container::reconstruct >, InPlaceType< Self >, It first, Sent last) -> vocab::Span< Value >
Definition constant_vector_interface.h:119
constexpr auto subspan() const
Definition constant_vector_interface.h:100
constexpr auto at(size_t index)
Definition constant_vector_interface.h:50
constexpr auto operator[](size_t index) -> decltype(auto)
Definition constant_vector_interface.h:53
constexpr auto begin()
Definition constant_vector_interface.h:38
constexpr auto back()
Definition constant_vector_interface.h:47
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 compare.h:82
Definition compare.h:91
constexpr auto last(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_last.h:13
constexpr auto end(concepts::detail::ConstantVector auto &vector)
Definition vector_end.h:8
constexpr auto back(concepts::detail::ConstantVector auto &vector)
Definition vector_back.h:11
constexpr auto lookup(concepts::detail::ConstantVector auto &vector, size_t index) -> decltype(auto)
Definition vector_lookup.h:10
constexpr auto front(concepts::detail::ConstantVector auto &vector)
Definition vector_front.h:10
constexpr auto size(concepts::detail::ConstantVector auto const &vector) -> size_t
Definition vector_size.h:7
constexpr auto first(concepts::detail::ConstantVector auto &vector, size_t count)
Definition vector_first.h:13
constexpr auto iterator(Vec &, CIter iterator) -> Iter
Definition vector_iterator.h:13
constexpr auto size_bytes(Vec const &vector) -> size_t
Definition vector_size_bytes.h:9
constexpr auto subspan(concepts::detail::ConstantVector auto &vector, size_t offset)
Definition vector_subspan.h:13
constexpr auto begin(concepts::detail::ConstantVector auto &vector)
Definition vector_begin.h:7
constexpr auto data(concepts::detail::ConstantVector auto &vector)
Definition vector_data.h:6
constexpr auto empty(concepts::detail::ConstantVector auto const &vector) -> bool
Definition vector_empty.h:7
constexpr auto at(concepts::detail::ConstantVector auto &vector, size_t index)
Definition vector_at.h:11
Definition sequence.h:12
constexpr auto equal
Definition equal.h:46
constexpr auto compare
Definition compare.h:40
constexpr auto count
Definition count.h:37
di::meta::Decay< decltype(T)> Tag
Definition tag_invoke.h:28
Span(Iter, SentOrSize) -> Span< meta::RemoveReference< meta::IteratorReference< Iter > > >
Definition in_place_type.h:5