31#ifndef ETL_STACK_INCLUDED
32#define ETL_STACK_INCLUDED
66 stack_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
67 :
exception(reason_, file_name_, line_number_)
76 class stack_full :
public stack_exception
80 stack_full(string_type file_name_, numeric_type line_number_)
81 : stack_exception(ETL_ERROR_TEXT(
"stack:full", ETL_STACK_FILE_ID
"A"), file_name_, line_number_)
90 class stack_empty :
public stack_exception
94 stack_empty(string_type file_name_, numeric_type line_number_)
95 : stack_exception(ETL_ERROR_TEXT(
"stack:empty", ETL_STACK_FILE_ID
"B"), file_name_, line_number_)
178 ETL_INCREMENT_DEBUG_COUNT;
188 ETL_DECREMENT_DEBUG_COUNT;
198 ETL_RESET_DEBUG_COUNT;
218 template <
typename T>
227 typedef T&& rvalue_reference;
259 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(!
full(), ETL_ERROR(
stack_full));
272 void push(rvalue_reference value)
274 ETL_ASSERT_CHECK_PUSH_POP_OR_RETURN(!
full(), ETL_ERROR(
stack_full));
277 ::new (&p_buffer[
top_index]) T(etl::move(value));
281#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT
288 template <
typename... Args>
291 ETL_ASSERT_CHECK_PUSH_POP(!
full(), ETL_ERROR(stack_full));
294 ::new (&p_buffer[
top_index]) T(etl::forward<Args>(args)...);
321 template <
typename T1>
338 template <
typename T1,
typename T2>
344 ::new (&p_buffer[
top_index]) T(value1, value2);
355 template <
typename T1,
typename T2,
typename T3>
361 ::new (&p_buffer[
top_index]) T(value1, value2, value3);
372 template <
typename T1,
typename T2,
typename T3,
typename T4>
378 ::new (&p_buffer[
top_index]) T(value1, value2, value3, value4);
401 if ETL_IF_CONSTEXPR (etl::is_trivially_destructible<T>::value)
432 destination = ETL_MOVE(
top());
441 template <
typename TContainer>
444 destination.push(ETL_MOVE(
top()));
478 clone(etl::move(rhs));
496 for (
size_t i = 0UL; i < other.
size(); ++i)
498 push(other.p_buffer[index++]);
512 for (
size_t i = 0UL; i < other.size(); ++i)
514 push(etl::move(other.p_buffer[index++]));
524 , p_buffer(p_buffer_)
538#if defined(ETL_POLYMORPHIC_STACK) || defined(ETL_POLYMORPHIC_CONTAINERS)
558 template <
typename T, const
size_t SIZE>
565 static ETL_CONSTANT
size_t MAX_SIZE = SIZE;
571 :
etl::
istack<T>(reinterpret_cast<T*>(&buffer[0]), SIZE)
579 :
etl::
istack<T>(reinterpret_cast<T*>(&buffer[0]), SIZE)
589 :
etl::
istack<T>(reinterpret_cast<T*>(&buffer[0]), SIZE)
634 container_type buffer[SIZE];
637 template <
typename T, const
size_t SIZE>
638 ETL_CONSTANT
size_t stack<T, SIZE>::MAX_SIZE;
Definition alignment.h:251
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
ETL_DECLARE_DEBUG_COUNT
For internal debugging purposes.
Definition stack.h:204
void del_out()
Decrements the indexes value to record a queue deletion.
Definition stack.h:184
stack & operator=(const stack &rhs)
Assignment operator.
Definition stack.h:606
reference top()
Definition stack.h:245
bool empty() const
Definition stack.h:116
~stack_base()
Destructor.
Definition stack.h:170
stack()
Default constructor.
Definition stack.h:570
stack_base(size_type max_size_)
The constructor that is called from derived classes.
Definition stack.h:160
bool full() const
Definition stack.h:125
const T * const_pointer
A const pointer to the type used in the stack.
Definition stack.h:230
const size_type CAPACITY
The maximum number of items in the stack.
Definition stack.h:203
void index_clear()
Clears all of the indexes.
Definition stack.h:194
size_type size() const
Returns the current number of items top the stack.
Definition stack.h:133
reference emplace(const T1 &value1, const T2 &value2)
Definition stack.h:339
reference emplace(const T1 &value1)
Definition stack.h:322
istack(T *p_buffer_, size_type max_size_)
The constructor that is called from derived classes.
Definition stack.h:522
size_type max_size() const
Returns the maximum number of items that can be stacked.
Definition stack.h:141
size_type current_size
The number of items in the stack.
Definition stack.h:202
reference emplace()
Definition stack.h:305
size_t available() const
Definition stack.h:150
void push(const_reference value)
Definition stack.h:257
void pop()
Removes the oldest item from the top of the stack.
Definition stack.h:418
istack & operator=(const istack &rhs)
Assignment operator.
Definition stack.h:459
size_type top_index
The index of the top of the stack.
Definition stack.h:201
size_t size_type
The type used for determining the size of stack.
Definition stack.h:110
reference emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition stack.h:373
T & reference
A reference to the type used in the stack.
Definition stack.h:224
reference emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition stack.h:356
T * pointer
A pointer to the type used in the stack.
Definition stack.h:229
~stack()
Destructor.
Definition stack.h:598
stack(const stack &rhs)
Copy constructor.
Definition stack.h:578
void pop_into(TContainer &destination)
Definition stack.h:442
void clone(const istack &other)
Make this a clone of the supplied stack.
Definition stack.h:490
~istack()
Destructor.
Definition stack.h:547
void pop_into(reference destination)
Definition stack.h:430
const T & const_reference
A const reference to the type used in the stack.
Definition stack.h:225
void add_in()
Increments the indexes value to record a stack addition.
Definition stack.h:175
void clear()
Clears the stack to the empty state.
Definition stack.h:399
stack_base::size_type size_type
The type used for determining the size of the stack.
Definition stack.h:231
T value_type
The type stored in the stack.
Definition stack.h:223
void reverse()
Reverses the stack.
Definition stack.h:451
const_reference top() const
Definition stack.h:390
This is the base for all stacks that contain a particular type.
Definition stack.h:220
bitset_ext
Definition absolute.h:40