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) {
60constexpr auto at(concepts::detail::ConstantRing
auto&
ring,
usize index) {
66constexpr auto front(concepts::detail::ConstantRing
auto&
ring) {
70constexpr auto back(concepts::detail::ConstantRing
auto&
ring) {
76template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
83template<concepts::detail::ConstantRing Ring>
90template<concepts::detail::ConstantRing Ring>
96template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
104 auto const to_remove = last - first;
111 ring.assume_tail((
ring.tail() +
ring.capacity() - to_remove) %
ring.capacity());
115template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
120constexpr void clear(concepts::detail::MutableRing
auto&
ring) {
127template<concepts::detail::MutableRing Ring,
typename R = meta::detail::RingAllocResult<Ring>>
129 if (capacity <=
ring.capacity()) {
136 return temp.reserve_from_nothing(capacity);
141 temp.assume_size(
size);
143 temp.assume_tail(
size);
151template<concepts::detail::MutableRing
Ring,
typename... Args>
166template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
167 typename R = meta::detail::RingAllocResult<Ring>>
178 auto new_size =
size - 1;
180 ring.assume_size(new_size);
186template<concepts::detail::MutableRing
Ring,
typename... Args>
193 auto new_head = (
ring.head() +
ring.capacity() - 1) %
ring.capacity();
194 ring.assume_head(new_head);
204template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
205 typename R = meta::detail::RingAllocResult<Ring>>
216 auto new_size =
size - 1;
218 ring.assume_size(new_size);
224template<concepts::detail::MutableRing Ring,
typename T = meta::detail::RingValue<Ring>,
typename... Args>
236template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
237 typename R = meta::detail::RingAllocResult<Ring, di::View<RingIterator<T>, RingIterator<T>>>>
242 auto inserted =
usize(0);
249 .transform_error([&] {
251 auto& cring = di::as_const(
ring);
259 return di::View { start, start + inserted };
265 auto head =
ring.head();
266 auto tail =
ring.tail();
287template<concepts::detail::MutableRing Ring,
typename T = meta::detail::RingValue<Ring>>
298template<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:213
constexpr auto prepend_container(Ring &ring, Con &&container) -> R
Definition ring_operations.h:207
constexpr auto end(Ring &ring)
Definition ring_operations.h:51
constexpr auto emplace_back(Ring &ring, Args &&... args) -> decltype(auto)
Definition ring_operations.h:153
constexpr auto append_container(Ring &ring, Con &&container) -> R
Definition ring_operations.h:169
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:78
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:289
constexpr auto make_contigous(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:264
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:60
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:120
constexpr auto erase(Ring &ring, RingIterator< Value const > first, RingIterator< Value const > last)
Definition ring_operations.h:97
constexpr auto reserve(Ring &ring, usize capacity) -> R
Definition ring_operations.h:128
constexpr auto emplace_front(Ring &ring, Args &&... args) -> decltype(auto)
Definition ring_operations.h:188
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:239
constexpr auto pop_back(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:175
constexpr auto emplace(Ring &ring, RingIterator< T const > it, Args &&... args)
Definition ring_operations.h:226
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:27
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