9 class QueueBuffer :
protected Buffer<t_type, t_memory_manager>
12 using t_index_type =
typename t_memory_manager::index_type;
13 constexpr QueueBuffer()
18 constexpr QueueBuffer(
const QueueBuffer& buffer)
20 , m_start(buffer.m_start)
26 , m_end(buffer.size())
28 constexpr QueueBuffer(QueueBuffer&& buffer) noexcept
30 , m_start(buffer.m_start)
34 explicit QueueBuffer(
uint04 size)
39 void push(t_type&&
object)
41 if(m_end == Buffer<t_type, t_memory_manager>::size())
47 std::swap(Buffer<t_type, t_memory_manager>::get(m_end),
object);
51 void push(
const t_type&
object)
53 if (m_end == Buffer<t_type, t_memory_manager>::size())
59 Buffer<t_type, t_memory_manager>::get(m_end) = object;
63 void pushAll(
const t_type*
object,
uint04 size)
67 uint04 current_size = Buffer<t_type, t_memory_manager>::size();
68 if (size > current_size - m_end)
70 for (
uint04 i = 0; i < size; i++)
71 Buffer<t_type, t_memory_manager>::get(i + m_end) = *(
object + i);
76 pushAll(
object.begin(),
object.size());
103 [[nodiscard]]
decltype(
auto)
front()
105 return Buffer<t_type, t_memory_manager>::get(m_start);
119 [[nodiscard]]
decltype(
auto)
front()
const
121 return Buffer<t_type, t_memory_manager>::get(m_start);
126 return m_end == m_start;
128 [[nodiscard]]
constexpr static t_type Type() {
return Buffer<t_type, t_memory_manager>::Type(); }
130 [[nodiscard]]
constexpr t_memory_manager& memoryInterface()
134 [[nodiscard]]
constexpr const t_memory_manager& memoryInterface()
const
138 inline QueueBuffer& operator=(
const QueueBuffer& buffer)
noexcept
140 m_start = buffer.m_start;
141 m_end = buffer.m_end;
145 inline QueueBuffer& operator=(QueueBuffer&& buffer)
noexcept
147 m_start = buffer.m_start;
148 m_end = buffer.m_end;
152 inline const t_type& operator[](t_index_type value)
const noexcept
156 inline t_type& operator[](t_index_type value)
noexcept
162 return m_end - m_start;
164 inline const t_type& last()
const
168 inline t_type& last()