31#ifndef ETL_QUEUE_INCLUDED
32#define ETL_QUEUE_INCLUDED
106 template <
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
196 ETL_INCREMENT_DEBUG_COUNT;
209 ETL_DECREMENT_DEBUG_COUNT;
220 ETL_RESET_DEBUG_COUNT;
242 template <
typename T, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
276 return p_buffer[
out];
285 return p_buffer[
out];
313#if defined(ETL_CHECK_PUSH_POP)
316 ::new (&p_buffer[
in])
T(value);
328#if defined(ETL_CHECK_PUSH_POP)
331 ::new (&p_buffer[
in])
T(etl::move(value));
336#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_FORCE_CPP03_IMPLEMENTATION)
342 template <
typename ... Args>
345#if defined(ETL_CHECK_PUSH_POP)
359#if defined(ETL_CHECK_PUSH_POP)
362 ::new (&p_buffer[
in])
T();
371 template <
typename T1>
374#if defined(ETL_CHECK_PUSH_POP)
377 ::new (&p_buffer[
in])
T(value1);
386 template <
typename T1,
typename T2>
389#if defined(ETL_CHECK_PUSH_POP)
392 ::new (&p_buffer[
in])
T(value1, value2);
401 template <
typename T1,
typename T2,
typename T3>
404#if defined(ETL_CHECK_PUSH_POP)
407 ::new (&p_buffer[
in])
T(value1, value2, value3);
416 template <
typename T1,
typename T2,
typename T3,
typename T4>
419#if defined(ETL_CHECK_PUSH_POP)
422 ::new (&p_buffer[
in])
T(value1, value2, value3, value4);
456#if defined(ETL_CHECK_PUSH_POP)
479 template <
typename TContainer>
530 index = (index == (
CAPACITY - 1)) ? 0 : index + 1;
547 index = (index == (
CAPACITY - 1)) ? 0 : index + 1;
571#if defined(ETL_POLYMORPHIC_QUEUE) || defined(ETL_POLYMORPHIC_CONTAINERS)
592 template <
typename T, const
size_t SIZE, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
606 static ETL_CONSTANT size_type MAX_SIZE = size_type(SIZE);
675 container_type buffer[SIZE];
678 template <
typename T, const
size_t SIZE, const
size_t MEMORY_MODEL>
679 ETL_CONSTANT
typename queue<T, SIZE, MEMORY_MODEL>::size_type queue<T, SIZE, MEMORY_MODEL>::MAX_SIZE;
Definition alignment.h:231
#define ETL_ASSERT(b, e)
Definition error_handler.h:316
Definition exception.h:47
Definition integral_limits.h:516
~queue()
Destructor.
Definition queue.h:639
size_type in
Where to input new data.
Definition queue.h:223
queue & operator=(const queue &rhs)
Assignment operator.
Definition queue.h:647
void emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition queue.h:402
const_reference front() const
Definition queue.h:283
ETL_DECLARE_DEBUG_COUNT
For internal debugging purposes.
Definition queue.h:227
const T * const_pointer
A const pointer to the type used in the queue.
Definition queue.h:258
void push(const_reference value)
Definition queue.h:311
const_reference back() const
Definition queue.h:301
void emplace(const T1 &value1)
Definition queue.h:372
reference front()
Definition queue.h:274
size_type current_size
The number of items in the queue.
Definition queue.h:225
queue()
Default constructor.
Definition queue.h:611
void pop_into(reference destination)
Definition queue.h:467
etl::size_type_lookup< MEMORY_MODEL >::type size_type
The type used for determining the size of queue.
Definition queue.h:112
iqueue & operator=(const iqueue &rhs)
Assignment operator.
Definition queue.h:489
T value_type
The type stored in the queue.
Definition queue.h:251
void pop()
Definition queue.h:454
void index_clear()
Clears the indexes.
Definition queue.h:215
size_type out
Where to get the oldest data.
Definition queue.h:224
~queue_base()
Destructor.
Definition queue.h:181
bool full() const
Definition queue.h:151
reference back()
Definition queue.h:292
size_type available() const
Definition queue.h:160
void del_out()
Increments (and wraps) the 'out' index value to record a queue deletion.
Definition queue.h:202
void add_in()
Increments (and wraps) the 'in' index value to record a queue addition.
Definition queue.h:188
~iqueue()
Destructor.
Definition queue.h:578
const size_type CAPACITY
The maximum number of items in the queue.
Definition queue.h:226
base_t::size_type size_type
The type used for determining the size of the queue.
Definition queue.h:259
iqueue(T *p_buffer_, size_type max_size_)
The constructor that is called from derived classes.
Definition queue.h:555
queue_base(size_type max_size_)
The constructor that is called from derived classes.
Definition queue.h:170
void clone(const iqueue &other)
Make this a clone of the supplied queue.
Definition queue.h:521
queue(const queue &rhs)
Copy constructor.
Definition queue.h:619
size_type size() const
Returns the current number of items in the queue.
Definition queue.h:117
const T & const_reference
A const reference to the type used in the queue.
Definition queue.h:253
void pop_into(TContainer &destination)
Definition queue.h:480
size_type capacity() const
Returns the maximum number of items that can be queued.
Definition queue.h:133
T & reference
A reference to the type used in the queue.
Definition queue.h:252
size_type max_size() const
Returns the maximum number of items that can be queued.
Definition queue.h:125
bool empty() const
Definition queue.h:142
void emplace()
Definition queue.h:357
T * pointer
A pointer to the type used in the queue.
Definition queue.h:257
void emplace(const T1 &value1, const T2 &value2)
Definition queue.h:387
void clear()
Clears the queue to the empty state.
Definition queue.h:430
void emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition queue.h:417
This is the base for all queues that contain a particular type.
Definition queue.h:244
add_rvalue_reference
Definition type_traits_generator.h:1327
bitset_ext
Definition absolute.h:38
Definition alignment.h:233
Definition type_traits_generator.h:2101
pair holds two objects of arbitrary type
Definition utility.h:164
ETL_CONSTEXPR pair()
Default constructor.
Definition utility.h:176
Definition memory_model.h:50