16constexpr auto size(concepts::detail::ConstantRing
auto&
ring) {
17 return ring.span().size();
21 return ring.span().size_bytes();
24constexpr auto empty(concepts::detail::ConstantRing
auto&
ring) ->
bool {
29 return ring.span().data();
44template<concepts::detail::ConstantRing Ring,
typename Value = meta::detail::RingValue<Ring>>
50template<concepts::detail::ConstantRing Ring,
typename Value = meta::detail::RingValue<Ring>>
56constexpr auto lookup(concepts::detail::ConstantRing
auto&
ring,
usize index) ->
decltype(
auto) {
58 auto start =
ring.head();
60 start %=
ring.capacity();
61 return ring.span().data()[start];
64constexpr auto at(concepts::detail::ConstantRing
auto&
ring,
usize index) {
70constexpr auto front(concepts::detail::ConstantRing
auto&
ring) {
74constexpr auto back(concepts::detail::ConstantRing
auto&
ring) {
80template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
87template<concepts::detail::ConstantRing Ring>
94template<concepts::detail::ConstantRing Ring>
100template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
108 auto const to_remove = last - first;
115 ring.assume_tail((
ring.tail() +
ring.capacity() - to_remove) %
ring.capacity());
119template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
124constexpr void clear(concepts::detail::MutableRing
auto&
ring) {
131template<concepts::detail::MutableRing Ring,
typename R = meta::detail::RingAllocResult<Ring>>
133 if (capacity <=
ring.capacity()) {
140 return temp.reserve_from_nothing(capacity);
145 temp.assume_size(
size);
147 temp.assume_tail(
size);
155template<concepts::detail::MutableRing
Ring,
typename... Args>
170template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
171 typename R = meta::detail::RingAllocResult<Ring>>
182 auto new_size =
size - 1;
184 ring.assume_size(new_size);
190template<concepts::detail::MutableRing
Ring,
typename... Args>
197 auto new_head = (
ring.head() +
ring.capacity() - 1) %
ring.capacity();
198 ring.assume_head(new_head);
208template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
209 typename R = meta::detail::RingAllocResult<Ring>>
220 auto new_size =
size - 1;
222 ring.assume_size(new_size);
228template<concepts::detail::MutableRing Ring,
typename T = meta::detail::RingValue<Ring>,
typename... Args>
240template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
241 typename R = meta::detail::RingAllocResult<Ring, di::View<RingIterator<T>, RingIterator<T>>>>
246 auto inserted =
usize(0);
253 .transform_error([&] {
255 auto& cring = di::as_const(
ring);
263 return di::View { start, start + inserted };
269 auto head =
ring.head();
270 auto tail =
ring.tail();
291template<concepts::detail::MutableRing Ring,
typename T = meta::detail::RingValue<Ring>>
302template<concepts::detail::MutableRing Ring,
typename T = meta::detail::RingValue<Ring>>
#define DI_ASSERT(...)
Definition assert_bool.h:7
Definition ring_iterator.h:8
Definition operations.h:11
Definition container_compatible.h:9
Definition operations.h:34
Definition operations.h:24
Definition ring_operations.h:15
constexpr auto pop_front(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:217
constexpr auto prepend_container(Ring &ring, Con &&container) -> R
Definition ring_operations.h:211
constexpr auto end(Ring &ring)
Definition ring_operations.h:51
constexpr auto emplace_back(Ring &ring, Args &&... args) -> decltype(auto)
Definition ring_operations.h:157
constexpr auto append_container(Ring &ring, Con &&container) -> R
Definition ring_operations.h:173
constexpr auto lookup(concepts::detail::ConstantRing auto &ring, usize index) -> decltype(auto)
Definition ring_operations.h:56
constexpr auto iterator(Ring &, RingIterator< Value const > iterator)
Definition ring_operations.h:82
constexpr auto end_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:32
constexpr auto empty(concepts::detail::ConstantRing auto &ring) -> bool
Definition ring_operations.h:24
constexpr auto resize(Ring &ring, usize count)
Definition ring_operations.h:293
constexpr auto make_contigous(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:268
constexpr auto begin_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:28
constexpr auto at(concepts::detail::ConstantRing auto &ring, usize index)
Definition ring_operations.h:64
constexpr auto size_bytes(concepts::detail::ConstantRing auto &ring)
Definition ring_operations.h:20
constexpr auto begin(Ring &ring)
Definition ring_operations.h:45
constexpr void clear(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:124
constexpr auto erase(Ring &ring, RingIterator< Value const > first, RingIterator< Value const > last)
Definition ring_operations.h:101
constexpr auto reserve(Ring &ring, usize capacity) -> R
Definition ring_operations.h:132
constexpr auto emplace_front(Ring &ring, Args &&... args) -> decltype(auto)
Definition ring_operations.h:192
constexpr auto tail_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:40
constexpr auto insert_container(Ring &ring, RingIterator< T const > it, Con &&container) -> R
Definition ring_operations.h:243
constexpr auto pop_back(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:179
constexpr auto emplace(Ring &ring, RingIterator< T const > it, Args &&... args)
Definition ring_operations.h:230
constexpr auto head_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:36
constexpr auto size(concepts::detail::ConstantRing auto &ring)
Definition ring_operations.h:16
constexpr auto resize(Vec &vector, size_t count) -> R
Definition vector_resize.h:19
constexpr auto front
Definition access.h:58
constexpr auto empty
Definition empty.h:45
constexpr auto uninitialized_relocate
Definition uninitialized_relocate.h:41
constexpr auto uninitialized_relocate_backwards
Definition uninitialized_relocate_backwards.h:45
constexpr auto at
Definition access.h:147
constexpr auto sequence
Definition sequence.h:34
constexpr auto destroy
Definition destroy.h:35
constexpr auto size
Definition size.h:62
constexpr auto erase
Definition erase.h:76
constexpr auto count
Definition count.h:37
constexpr auto end
Definition end.h:55
constexpr auto transform
Definition transform.h:59
constexpr auto back
Definition access.h:94
constexpr auto rotate
Definition rotate.h:94
constexpr auto begin
Definition begin.h:52
size_t usize
Definition integers.h:33
constexpr auto ref
Definition reference_wrapper.h:98
constexpr auto relocate
Definition relocate.h:21
constexpr struct di::util::SwapFunction swap
constexpr auto create(Args &&... args)
Definition create.h:21
constexpr auto construct_at
Definition construct_at.h:35
constexpr auto invoke_as_fallible
Definition invoke_as_fallible.h:37
constexpr auto as_fallible
Definition as_fallible.h:26
constexpr auto try_infallible
Definition try_infallible.h:31
constexpr auto lift_bool
Definition lift_bool.h:13
constexpr auto rotate
Definition rotate.h:94