31#ifndef ETL_PRIORITY_QUEUE_INCLUDED
32#define ETL_PRIORITY_QUEUE_INCLUDED
65 :
exception(reason_, file_name_, line_number_)
79 :
priority_queue_exception(ETL_ERROR_TEXT(
"priority_queue:full", ETL_PRIORITY_QUEUE_FILE_ID
"A"), file_name_, line_number_)
93 :
priority_queue_exception(ETL_ERROR_TEXT(
"priority_queue:iterator", ETL_PRIORITY_QUEUE_FILE_ID
"B"), file_name_, line_number_)
114 template <
typename T,
typename TContainer,
typename TCompare = etl::less<T> >
125 typedef T&& rvalue_reference;
128 typedef typename etl::iterator_traits<typename TContainer::iterator>::difference_type difference_type;
136 return container.front();
145 return container.front();
159 container.push_back(value);
161 etl::push_heap(container.begin(), container.end(),
compare);
171 void push(rvalue_reference value)
176 container.push_back(etl::move(value));
178 etl::push_heap(container.begin(), container.end(),
compare);
182#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_PRIORITY_QUEUE_FORCE_CPP03_IMPLEMENTATION)
189 template <
typename ... Args>
195 container.emplace_back(etl::forward<Args>(args)...);
197 etl::push_heap(container.begin(), container.end(), compare);
206 template <
typename T1>
212 container.emplace_back(value1);
214 etl::push_heap(container.begin(), container.end(),
compare);
223 template <
typename T1,
typename T2>
224 void emplace(
const T1& value1,
const T2& value2)
229 container.emplace_back(value1, value2);
231 etl::push_heap(container.begin(), container.end(),
compare);
240 template <
typename T1,
typename T2,
typename T3>
241 void emplace(
const T1& value1,
const T2& value2,
const T3& value3)
246 container.emplace_back(value1, value2, value3);
248 etl::push_heap(container.begin(), container.end(),
compare);
257 template <
typename T1,
typename T2,
typename T3,
typename T4>
258 void emplace(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
263 container.emplace_back(value1, value2, value3, value4);
265 etl::push_heap(container.begin(), container.end(),
compare);
278 template <
typename TIterator>
279 void assign(TIterator first, TIterator last)
281#if ETL_IS_DEBUG_BUILD
282 difference_type d = etl::distance(first, last);
288 container.assign(first, last);
289 etl::make_heap(container.begin(), container.end(),
compare);
299 etl::pop_heap(container.begin(), container.end(),
compare);
301 container.pop_back();
310 destination = ETL_MOVE(
top());
319 return container.size();
327 return container.max_size();
336 return container.empty();
345 return container.size() == container.max_size();
354 return container.max_size() - container.size();
386 move(etl::move(rhs));
400 assign(other.container.cbegin(), other.container.cend());
409 while (!other.empty())
411 push(etl::move(other.top()));
430 TContainer container;
442 template <
typename T, const
size_t SIZE,
typename TContainer = etl::vector<T, SIZE>,
typename TCompare = etl::less<
typename TContainer::value_type> >
447 typedef typename TContainer::size_type size_type;
448 typedef TContainer container_type;
450 static ETL_CONSTANT size_type MAX_SIZE = size_type(SIZE);
486 template <
typename TIterator>
530 template <
typename T, const
size_t SIZE,
typename TContainer,
typename TCompare>
531 ETL_CONSTANT
typename priority_queue<T, SIZE, TContainer, TCompare>::size_type priority_queue<T, SIZE, TContainer, TCompare>::MAX_SIZE;
Definition: priority_queue.h:444
~priority_queue()
Destructor.
Definition: priority_queue.h:496
priority_queue(const priority_queue &rhs)
Copy constructor.
Definition: priority_queue.h:463
priority_queue & operator=(const priority_queue &rhs)
Assignment operator.
Definition: priority_queue.h:504
priority_queue()
Default constructor.
Definition: priority_queue.h:455
priority_queue(TIterator first, TIterator last)
Definition: priority_queue.h:487
#define ETL_ASSERT(b, e)
Definition: error_handler.h:316
ETL_CONSTEXPR exception(string_type reason_, string_type, numeric_type line_)
Constructor.
Definition: exception.h:69
Definition: exception.h:47
bool full() const
Definition: priority_queue.h:343
void pop_into(reference destination)
Definition: priority_queue.h:308
bool empty() const
Definition: priority_queue.h:334
size_type max_size() const
Returns the maximum number of items that can be queued.
Definition: priority_queue.h:325
void assign(TIterator first, TIterator last)
Definition: priority_queue.h:279
void emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition: priority_queue.h:241
void push(const_reference value)
Definition: priority_queue.h:154
T & reference
A reference to the type used in the queue.
Definition: priority_queue.h:122
void emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition: priority_queue.h:258
ipriority_queue & operator=(const ipriority_queue &rhs)
Assignment operator.
Definition: priority_queue.h:368
TCompare compare_type
The comparison type.
Definition: priority_queue.h:121
reference top()
Definition: priority_queue.h:134
const T & const_reference
A const reference to the type used in the queue.
Definition: priority_queue.h:123
T value_type
The type stored in the queue.
Definition: priority_queue.h:119
size_type size() const
Returns the current number of items in the priority queue.
Definition: priority_queue.h:317
void clone(const ipriority_queue &other)
Make this a clone of the supplied priority queue.
Definition: priority_queue.h:398
const_reference top() const
Definition: priority_queue.h:143
void clear()
Clears the queue to the empty state.
Definition: priority_queue.h:360
void pop()
Definition: priority_queue.h:296
void emplace(const T1 &value1)
Definition: priority_queue.h:207
size_type available() const
Definition: priority_queue.h:352
TContainer::size_type size_type
The type used for determining the size of the queue.
Definition: priority_queue.h:127
TContainer container_type
The container type used for priority queue.
Definition: priority_queue.h:120
ipriority_queue()
The constructor that is called from derived classes.
Definition: priority_queue.h:420
void emplace(const T1 &value1, const T2 &value2)
Definition: priority_queue.h:224
This is the base for all priority queues that contain a particular type.
Definition: priority_queue.h:116
Definition: priority_queue.h:61
Definition: priority_queue.h:75
Definition: priority_queue.h:89
bitset_ext
Definition: absolute.h:38