Iros
 
Loading...
Searching...
No Matches
constant_ring_interface.h
Go to the documentation of this file.
1#pragma once
2
6
7namespace di::container {
8template<typename Self, typename Value>
10private:
11 constexpr auto self() -> Self& { return static_cast<Self&>(*this); }
12 constexpr auto self() const -> Self const& { return static_cast<Self const&>(*this); }
13
14public:
15 constexpr auto size() const -> usize { return ring::size(self()); }
16 constexpr auto size_bytes() const -> usize { return ring::size_bytes(self()); }
17 [[nodiscard]] constexpr auto empty() const -> bool { return ring::empty(self()); }
18
19 constexpr auto begin() { return ring::begin(self()); }
20 constexpr auto end() { return ring::end(self()); }
21
22 constexpr auto begin() const { return ring::begin(self()); }
23 constexpr auto end() const { return ring::end(self()); }
24
25 constexpr auto front() { return ring::front(self()); }
26 constexpr auto front() const { return ring::front(self()); }
27
28 constexpr auto back() { return ring::back(self()); }
29 constexpr auto back() const { return ring::back(self()); }
30
31 constexpr auto at(usize index) { return ring::at(self(), index); }
32 constexpr auto at(usize index) const { return ring::at(self(), index); }
33
34 constexpr auto operator[](usize index) -> decltype(auto) { return ring::lookup(self(), index); }
35 constexpr auto operator[](usize index) const -> decltype(auto) { return ring::lookup(self(), index); }
36
37 constexpr auto iterator(usize index) { return ring::iterator(self(), index); }
38 constexpr auto iterator(usize index) const { return ring::iterator(self(), index); }
39 constexpr auto citerator(usize index) const { return ring::iterator(self(), index); }
40
41private:
42 constexpr friend auto operator==(Self const& a, Self const& b) -> bool
44 {
45 return container::equal(a, b);
46 }
47
48 constexpr friend auto operator<=>(Self const& a, Self const& b)
50 {
51 return container::compare(a, b);
52 }
53};
54}
Definition constant_ring_interface.h:9
constexpr auto size_bytes() const -> usize
Definition constant_ring_interface.h:16
constexpr auto back() const
Definition constant_ring_interface.h:29
constexpr auto citerator(usize index) const
Definition constant_ring_interface.h:39
constexpr auto end() const
Definition constant_ring_interface.h:23
constexpr friend auto operator<=>(Self const &a, Self const &b)
Definition constant_ring_interface.h:48
constexpr auto end()
Definition constant_ring_interface.h:20
constexpr auto back()
Definition constant_ring_interface.h:28
constexpr auto front() const
Definition constant_ring_interface.h:26
constexpr auto size() const -> usize
Definition constant_ring_interface.h:15
constexpr auto begin() const
Definition constant_ring_interface.h:22
constexpr auto empty() const -> bool
Definition constant_ring_interface.h:17
constexpr auto front()
Definition constant_ring_interface.h:25
constexpr auto begin()
Definition constant_ring_interface.h:19
constexpr auto iterator(usize index)
Definition constant_ring_interface.h:37
constexpr auto operator[](usize index) const -> decltype(auto)
Definition constant_ring_interface.h:35
constexpr auto at(usize index) const
Definition constant_ring_interface.h:32
constexpr friend auto operator==(Self const &a, Self const &b) -> bool requires(concepts::EqualityComparable< Value >)
Definition constant_ring_interface.h:42
constexpr auto iterator(usize index) const
Definition constant_ring_interface.h:38
constexpr auto at(usize index)
Definition constant_ring_interface.h:31
constexpr auto operator[](usize index) -> decltype(auto)
Definition constant_ring_interface.h:34
Definition compare.h:82
Definition compare.h:91
constexpr auto front(concepts::detail::ConstantRing auto &ring)
Definition ring_operations.h:65
constexpr auto end(Ring &ring)
Definition ring_operations.h:50
constexpr auto lookup(concepts::detail::ConstantRing auto &ring, usize index) -> decltype(auto)
Definition ring_operations.h:55
constexpr auto iterator(Ring &, RingIterator< Value const > iterator)
Definition ring_operations.h:77
constexpr auto empty(concepts::detail::ConstantRing auto &ring) -> bool
Definition ring_operations.h:23
constexpr auto back(concepts::detail::ConstantRing auto &ring)
Definition ring_operations.h:69
constexpr auto at(concepts::detail::ConstantRing auto &ring, usize index)
Definition ring_operations.h:59
constexpr auto size_bytes(concepts::detail::ConstantRing auto &ring)
Definition ring_operations.h:19
constexpr auto begin(Ring &ring)
Definition ring_operations.h:44
constexpr auto size(concepts::detail::ConstantRing auto &ring)
Definition ring_operations.h:15
Definition sequence.h:12
constexpr auto equal
Definition equal.h:46
constexpr auto compare
Definition compare.h:40
size_t usize
Definition integers.h:33