31 #ifndef ETL_QUEUE_INCLUDED
32 #define ETL_QUEUE_INCLUDED
71 queue_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
72 :
exception(reason_, file_name_, line_number_)
85 queue_full(string_type file_name_, numeric_type line_number_)
86 :
queue_exception(ETL_ERROR_TEXT(
"queue:full", ETL_FILE
"A"), file_name_, line_number_)
99 queue_empty(string_type file_name_, numeric_type line_number_)
100 :
queue_exception(ETL_ERROR_TEXT(
"queue:empty", ETL_FILE
"B"), file_name_, line_number_)
109 template <const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
199 ETL_INCREMENT_DEBUG_COUNT
212 ETL_DECREMENT_DEBUG_COUNT
223 ETL_RESET_DEBUG_COUNT
230 ETL_DECLARE_DEBUG_COUNT
245 template <
typename T, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
257 #if ETL_CPP11_SUPPORTED
258 typedef T&& rvalue_reference;
279 return p_buffer[
out];
288 return p_buffer[
out];
316 #if defined(ETL_CHECK_PUSH_POP)
319 ::new (&p_buffer[
in]) T(value);
323 #if ETL_CPP11_SUPPORTED
329 void push(rvalue_reference value)
331 #if defined(ETL_CHECK_PUSH_POP)
334 ::new (&p_buffer[
in]) T(etl::move(value));
339 #if ETL_CPP11_SUPPORTED && ETL_NOT_USING_STLPORT && !defined(ETL_QUEUE_FORCE_CPP03)
345 template <
typename ... Args>
348 #if defined(ETL_CHECK_PUSH_POP)
351 ::new (&p_buffer[
in]) T(etl::forward<Args>(args)...);
360 template <
typename T1>
363 #if defined(ETL_CHECK_PUSH_POP)
366 ::new (&p_buffer[
in]) T(value1);
375 template <
typename T1,
typename T2>
376 void emplace(
const T1& value1,
const T2& value2)
378 #if defined(ETL_CHECK_PUSH_POP)
381 ::new (&p_buffer[
in]) T(value1, value2);
390 template <
typename T1,
typename T2,
typename T3>
391 void emplace(
const T1& value1,
const T2& value2,
const T3& value3)
393 #if defined(ETL_CHECK_PUSH_POP)
396 ::new (&p_buffer[
in]) T(value1, value2, value3);
405 template <
typename T1,
typename T2,
typename T3,
typename T4>
406 void emplace(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
408 #if defined(ETL_CHECK_PUSH_POP)
411 ::new (&p_buffer[
in]) T(value1, value2, value3, value4);
445 #if defined(ETL_CHECK_PUSH_POP)
458 destination =
front();
468 template <
typename TContainer>
471 destination.push(
front());
489 #if ETL_CPP11_SUPPORTED
518 push(other.p_buffer[index]);
519 index = (index == (
CAPACITY - 1)) ? 0 : index + 1;
523 #if ETL_CPP11_SUPPORTED
527 void move_clone(
iqueue&& other)
533 for (
size_type i = 0; i < other.size(); ++i)
535 push(etl::move(other.p_buffer[index]));
536 index = (index == (
CAPACITY - 1)) ? 0 : index + 1;
560 #if defined(ETL_POLYMORPHIC_QUEUE) || defined(ETL_POLYMORPHIC_CONTAINERS)
581 template <
typename T, const
size_t SIZE, const
size_t MEMORY_MODEL = etl::memory_model::MEMORY_MODEL_LARGE>
594 static const size_type MAX_SIZE = size_type(SIZE);
600 :
base_t(reinterpret_cast<T*>(&buffer[0]), SIZE)
608 :
base_t(reinterpret_cast<T*>(&buffer[0]), SIZE)
613 #if ETL_CPP11_SUPPORTED
618 : base_t(reinterpret_cast<T*>(&buffer[0]), SIZE)
620 base_t::move_clone(etl::move(rhs));
645 #if ETL_CPP11_SUPPORTED
653 base_t::move_clone(rhs);
Definition: alignment.h:116
#define ETL_ASSERT(b, e)
Definition: error_handler.h:290
exception(string_type reason_, string_type file_, numeric_type line_)
Constructor.
Definition: exception.h:67
Definition: exception.h:47
Definition: integral_limits.h:54
~queue()
Destructor.
Definition: queue.h:627
size_type in
Where to input new data.
Definition: queue.h:226
void emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition: queue.h:391
const_reference front() const
Definition: queue.h:286
const T * const_pointer
A const pointer to the type used in the queue.
Definition: queue.h:261
void push(const_reference value)
Definition: queue.h:314
const_reference back() const
Definition: queue.h:304
void emplace(const T1 &value1)
Definition: queue.h:361
reference front()
Definition: queue.h:277
iqueue & operator=(const iqueue &rhs)
Assignment operator.
Definition: queue.h:478
size_type current_size
The number of items in the queue.
Definition: queue.h:228
queue()
Default constructor.
Definition: queue.h:599
void pop_into(reference destination)
Definition: queue.h:456
etl::size_type_lookup< MEMORY_MODEL >::type size_type
The type used for determining the size of queue.
Definition: queue.h:115
T value_type
The type stored in the queue.
Definition: queue.h:254
void pop()
Definition: queue.h:443
void index_clear()
Clears the indexes.
Definition: queue.h:218
size_type out
Where to get the oldest data.
Definition: queue.h:227
~queue_base()
Destructor.
Definition: queue.h:184
bool full() const
Definition: queue.h:154
reference back()
Definition: queue.h:295
size_type available() const
Definition: queue.h:163
void del_out()
Decrements (and wraps) the 'out' index value to record a queue deletion.
Definition: queue.h:205
void add_in()
Increments (and wraps) the 'in' index value to record a queue addition.
Definition: queue.h:191
queue & operator=(const queue &rhs)
Assignment operator.
Definition: queue.h:635
~iqueue()
Destructor.
Definition: queue.h:567
const size_type CAPACITY
The maximum number of items in the queue.
Definition: queue.h:229
base_t::size_type size_type
The type used for determining the size of the queue.
Definition: queue.h:262
iqueue(T *p_buffer_, size_type max_size_)
The constructor that is called from derived classes.
Definition: queue.h:544
queue_base(size_type max_size_)
The constructor that is called from derived classes.
Definition: queue.h:173
void clone(const iqueue &other)
Make this a clone of the supplied queue.
Definition: queue.h:510
queue(const queue &rhs)
Copy constructor.
Definition: queue.h:607
size_type size() const
Returns the current number of items in the queue.
Definition: queue.h:120
const T & const_reference
A const reference to the type used in the queue.
Definition: queue.h:256
void pop_into(TContainer &destination)
Definition: queue.h:469
size_type capacity() const
Returns the maximum number of items that can be queued.
Definition: queue.h:136
T & reference
A reference to the type used in the queue.
Definition: queue.h:255
size_type max_size() const
Returns the maximum number of items that can be queued.
Definition: queue.h:128
bool empty() const
Definition: queue.h:145
T * pointer
A pointer to the type used in the queue.
Definition: queue.h:260
void emplace(const T1 &value1, const T2 &value2)
Definition: queue.h:376
void clear()
Clears the queue to the empty state.
Definition: queue.h:419
void emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition: queue.h:406
This is the base for all queues that contain a particular type.
Definition: queue.h:247
add_rvalue_reference
Definition: type_traits_generator.h:1348
is_trivially_destructible
Definition: type_traits_generator.h:1171
Definition: absolute.h:37
Definition: memory_model.h:48