31#ifndef ETL_QUEUE_INCLUDED
32#define ETL_QUEUE_INCLUDED
66 queue_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
67 :
exception(reason_, file_name_, line_number_)
76 class queue_full :
public queue_exception
80 queue_full(string_type file_name_, numeric_type line_number_)
81 : queue_exception(ETL_ERROR_TEXT(
"queue:full", ETL_QUEUE_FILE_ID
"A"), file_name_, line_number_)
90 class queue_empty :
public queue_exception
94 queue_empty(string_type file_name_, numeric_type line_number_)
95 : queue_exception(ETL_ERROR_TEXT(
"queue:empty", ETL_QUEUE_FILE_ID
"B"), file_name_, line_number_)
104 template <
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
192 ETL_INCREMENT_DEBUG_COUNT;
205 ETL_DECREMENT_DEBUG_COUNT;
216 ETL_RESET_DEBUG_COUNT;
237 template <
typename T, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
250 typedef T&& rvalue_reference;
274 return p_buffer[
out];
286 return p_buffer[
out];
321 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(!
full(), ETL_ERROR(
queue_full));
323 ::new (&p_buffer[
in]) T(value);
334 void push(rvalue_reference value)
336 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(!
full(), ETL_ERROR(
queue_full));
338 ::new (&p_buffer[
in]) T(etl::move(value));
343#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_FORCE_CPP03_IMPLEMENTATION)
351 template <
typename... Args>
354 ETL_ASSERT_CHECK_PUSH_POP(!
full(), ETL_ERROR(queue_full));
357 ::new (&value) T(etl::forward<Args>(args)...);
384 template <
typename T1>
390 ::new (&value) T(value1);
403 template <
typename T1,
typename T2>
409 ::new (&value) T(value1, value2);
423 template <
typename T1,
typename T2,
typename T3>
429 ::new (&value) T(value1, value2, value3);
444 template <
typename T1,
typename T2,
typename T3,
typename T4>
450 ::new (&value) T(value1, value2, value3, value4);
461 if ETL_IF_CONSTEXPR (etl::is_trivially_destructible<T>::value)
499 destination = ETL_MOVE(
front());
510 template <
typename TContainer>
513 destination.push(ETL_MOVE(
front()));
560 push(other.p_buffer[index]);
561 index = (index == (
CAPACITY - 1)) ? 0 : index + 1;
569 void move_clone(
iqueue&& other)
577 push(etl::move(other.p_buffer[index]));
578 index = (index == (
CAPACITY - 1)) ? 0 : index + 1;
588 , p_buffer(p_buffer_)
602#if defined(ETL_POLYMORPHIC_QUEUE) || defined(ETL_POLYMORPHIC_CONTAINERS)
624 template <
typename T, const
size_t SIZE, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
638 static ETL_CONSTANT size_type MAX_SIZE =
size_type(SIZE);
644 : base_t(reinterpret_cast<T*>(&buffer[0]), SIZE)
652 : base_t(reinterpret_cast<T*>(&buffer[0]), SIZE)
662 : base_t(reinterpret_cast<T*>(&buffer[0]), SIZE)
664 base_t::move_clone(etl::move(rhs));
697 base_t::move_clone(etl::move(rhs));
707 container_type buffer[SIZE];
710 template <
typename T, const
size_t SIZE, const
size_t MEMORY_MODEL>
711 ETL_CONSTANT
typename queue<T, SIZE, MEMORY_MODEL>::size_type queue<T, SIZE, MEMORY_MODEL>::MAX_SIZE;
Definition alignment.h:251
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
Definition integral_limits.h:518
~queue()
Destructor.
Definition queue.h:671
size_type in
Definition queue.h:219
reference emplace(const T1 &value1, const T2 &value2)
Definition queue.h:404
queue & operator=(const queue &rhs)
Assignment operator.
Definition queue.h:679
const_reference front() const
Definition queue.h:283
ETL_DECLARE_DEBUG_COUNT
Definition queue.h:223
const T * const_pointer
A const pointer to the type used in the queue.
Definition queue.h:253
void push(const_reference value)
Definition queue.h:319
reference emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition queue.h:424
const_reference back() const
Definition queue.h:307
reference front()
Definition queue.h:271
size_type current_size
Definition queue.h:221
queue()
Default constructor.
Definition queue.h:643
void pop_into(reference destination)
Definition queue.h:497
etl::size_type_lookup< MEMORY_MODEL >::type size_type
The type used for determining the size of queue.
Definition queue.h:110
iqueue & operator=(const iqueue &rhs)
Assignment operator.
Definition queue.h:520
reference emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition queue.h:445
T value_type
The type stored in the queue.
Definition queue.h:246
void pop()
Definition queue.h:484
void index_clear()
Clears the indexes.
Definition queue.h:211
size_type out
Definition queue.h:220
~queue_base()
Destructor.
Definition queue.h:179
bool full() const
Definition queue.h:149
reference back()
Definition queue.h:295
size_type available() const
Definition queue.h:158
void del_out()
Increments (and wraps) the 'out' index value to record a queue deletion.
Definition queue.h:198
void add_in()
Increments (and wraps) the 'in' index value to record a queue addition.
Definition queue.h:184
~iqueue()
Destructor.
Definition queue.h:611
const size_type CAPACITY
Definition queue.h:222
reference emplace()
Definition queue.h:367
base_t::size_type size_type
The type used for determining the size of the queue.
Definition queue.h:254
iqueue(T *p_buffer_, size_type max_size_)
The constructor that is called from derived classes.
Definition queue.h:586
queue_base(size_type max_size_)
The constructor that is called from derived classes.
Definition queue.h:168
void clone(const iqueue &other)
Make this a clone of the supplied queue.
Definition queue.h:552
queue(const queue &rhs)
Copy constructor.
Definition queue.h:651
size_type size() const
Returns the current number of items in the queue.
Definition queue.h:115
const T & const_reference
A const reference to the type used in the queue.
Definition queue.h:248
void pop_into(TContainer &destination)
Definition queue.h:511
size_type capacity() const
Returns the maximum number of items that can be queued.
Definition queue.h:131
T & reference
A reference to the type used in the queue.
Definition queue.h:247
size_type max_size() const
Returns the maximum number of items that can be queued.
Definition queue.h:123
reference emplace(const T1 &value1)
Definition queue.h:385
bool empty() const
Definition queue.h:140
T * pointer
A pointer to the type used in the queue.
Definition queue.h:252
void clear()
Clears the queue to the empty state.
Definition queue.h:459
This is the base for all queues that contain a particular type.
Definition queue.h:239
size_type size() const
Definition vector.h:1040
bitset_ext
Definition absolute.h:40
Definition memory_model.h:50