16 return ring.span().size();
20 return ring.span().size_bytes();
28 return ring.span().data();
43template<concepts::detail::ConstantRing Ring,
typename Value = meta::detail::RingValue<Ring>>
49template<concepts::detail::ConstantRing Ring,
typename Value = meta::detail::RingValue<Ring>>
75template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
82template<concepts::detail::ConstantRing Ring>
89template<concepts::detail::ConstantRing Ring>
102template<concepts::detail::MutableRing Ring,
typename R = meta::detail::RingAllocResult<Ring>>
104 if (capacity <=
ring.capacity()) {
111 return temp.reserve_from_nothing(capacity);
116 temp.assume_size(
size);
118 temp.assume_tail(
size);
141template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
142 typename R = meta::detail::RingAllocResult<Ring>>
153 auto new_size =
size - 1;
155 ring.assume_size(new_size);
168 auto new_head = (
ring.head() +
ring.capacity() - 1) %
ring.capacity();
169 ring.assume_head(new_head);
179template<concepts::detail::MutableRing Ring, concepts::InputContainer Con,
typename T = meta::detail::RingValue<Ring>,
180 typename R = meta::detail::RingAllocResult<Ring>>
191 auto new_size =
size - 1;
193 ring.assume_size(new_size);
199template<concepts::detail::MutableRing Ring,
typename T = meta::detail::RingValue<Ring>,
typename... Args>
211template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
219 auto const to_remove = last - first;
226 ring.assume_tail((
ring.tail() +
ring.capacity() - to_remove) %
ring.capacity());
230template<concepts::detail::MutableRing Ring,
typename Value = meta::detail::RingValue<Ring>>
236 auto head =
ring.head();
237 auto tail =
ring.tail();
258template<concepts::detail::MutableRing Ring,
typename T = meta::detail::RingValue<Ring>>
269template<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 constant_ring.h:10
Definition mutable_ring.h:8
Definition ring_operations.h:14
constexpr auto pop_front(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:188
constexpr auto prepend_container(Ring &ring, Con &&container) -> R
Definition ring_operations.h:182
constexpr auto end(Ring &ring)
Definition ring_operations.h:50
constexpr auto emplace_back(Ring &ring, Args &&... args) -> decltype(auto)
Definition ring_operations.h:128
constexpr auto append_container(Ring &ring, Con &&container) -> R
Definition ring_operations.h:144
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 end_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:31
constexpr auto empty(concepts::detail::ConstantRing auto &ring) -> bool
Definition ring_operations.h:23
constexpr auto resize(Ring &ring, usize count)
Definition ring_operations.h:260
constexpr auto make_contigous(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:235
constexpr auto begin_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:27
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 void clear(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:95
constexpr auto erase(Ring &ring, RingIterator< Value const > first, RingIterator< Value const > last)
Definition ring_operations.h:212
constexpr auto reserve(Ring &ring, usize capacity) -> R
Definition ring_operations.h:103
constexpr auto emplace_front(Ring &ring, Args &&... args) -> decltype(auto)
Definition ring_operations.h:163
constexpr auto tail_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:39
constexpr auto pop_back(concepts::detail::MutableRing auto &ring)
Definition ring_operations.h:150
constexpr auto emplace(Ring &ring, RingIterator< T const > it, Args &&... args)
Definition ring_operations.h:201
constexpr auto head_pointer(concepts::detail::ConstantRing auto &ring) -> auto *
Definition ring_operations.h:35
constexpr auto size(concepts::detail::ConstantRing auto &ring)
Definition ring_operations.h:15
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:54
constexpr auto erase
Definition erase.h:76
constexpr auto count
Definition count.h:37
constexpr auto end
Definition end.h:47
constexpr auto back
Definition access.h:94
constexpr auto rotate
Definition rotate.h:94
constexpr auto begin
Definition begin.h:44
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