31#ifndef ETL_PRIORITY_QUEUE_INCLUDED
32#define ETL_PRIORITY_QUEUE_INCLUDED
64 priority_queue_exception(string_type reason_, string_type file_name_, numeric_type line_number_)
65 :
exception(reason_, file_name_, line_number_)
78 priority_queue_full(string_type file_name_, numeric_type line_number_)
79 : priority_queue_exception(ETL_ERROR_TEXT(
"priority_queue:full", ETL_PRIORITY_QUEUE_FILE_ID
"A"), file_name_, line_number_)
92 priority_queue_iterator(string_type file_name_, numeric_type line_number_)
93 : priority_queue_exception(ETL_ERROR_TEXT(
"priority_queue:iterator", ETL_PRIORITY_QUEUE_FILE_ID
"B"), file_name_, line_number_)
106 priority_queue_empty(string_type file_name_, numeric_type line_number_)
107 : priority_queue_exception(ETL_ERROR_TEXT(
"priority_queue:empty", ETL_PRIORITY_QUEUE_FILE_ID
"C"), file_name_, line_number_)
129 template <
typename T,
typename TContainer,
typename TCompare = etl::less<T> >
140 typedef T&& rvalue_reference;
143 typedef typename etl::iterator_traits< typename TContainer::iterator>::difference_type difference_type;
154 return container.front();
166 return container.front();
180 container.push_back(value);
182 etl::push_heap(container.begin(), container.end(), compare);
192 void push(rvalue_reference value)
197 container.push_back(etl::move(value));
199 etl::push_heap(container.begin(), container.end(),
compare);
203#if ETL_USING_CPP11 && ETL_NOT_USING_STLPORT && !defined(ETL_PRIORITY_QUEUE_FORCE_CPP03_IMPLEMENTATION)
210 template <
typename... Args>
216 container.emplace_back(etl::forward<Args>(args)...);
218 etl::push_heap(container.begin(), container.end(), compare);
232 container.emplace_back();
234 etl::push_heap(container.begin(), container.end(), compare);
243 template <
typename T1>
249 container.emplace_back(value1);
251 etl::push_heap(container.begin(), container.end(), compare);
260 template <
typename T1,
typename T2>
261 void emplace(
const T1& value1,
const T2& value2)
266 container.emplace_back(value1, value2);
268 etl::push_heap(container.begin(), container.end(), compare);
277 template <
typename T1,
typename T2,
typename T3>
278 void emplace(
const T1& value1,
const T2& value2,
const T3& value3)
283 container.emplace_back(value1, value2, value3);
285 etl::push_heap(container.begin(), container.end(), compare);
294 template <
typename T1,
typename T2,
typename T3,
typename T4>
295 void emplace(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
300 container.emplace_back(value1, value2, value3, value4);
302 etl::push_heap(container.begin(), container.end(), compare);
315 template <
typename TIterator>
316 void assign(TIterator first, TIterator last)
318#if ETL_IS_DEBUG_BUILD
319 difference_type d = etl::distance(first, last);
325 container.assign(first, last);
326 etl::make_heap(container.begin(), container.end(), compare);
339 etl::pop_heap(container.begin(), container.end(), compare);
341 container.pop_back();
350 destination = ETL_MOVE(
top());
359 return container.size();
367 return container.max_size();
376 return container.empty();
386 return container.size() == container.max_size();
395 return container.max_size() - container.size();
428 move(etl::move(rhs));
442 assign(other.container.cbegin(), other.container.cend());
451 while (!other.empty())
453 push(etl::move(other.top()));
470 TContainer container;
482 template <
typename T, const
size_t SIZE,
typename TContainer = etl::vector<T, SIZE>,
483 typename TCompare = etl::less<
typename TContainer::value_type> >
488 typedef typename TContainer::size_type size_type;
489 typedef TContainer container_type;
491 static ETL_CONSTANT size_type MAX_SIZE =
size_type(SIZE);
527 template <
typename TIterator>
572 template <
typename T, const
size_t SIZE,
typename TContainer,
typename TCompare>
573 ETL_CONSTANT
typename priority_queue<T, SIZE, TContainer, TCompare>::size_type priority_queue<T, SIZE, TContainer, TCompare>::MAX_SIZE;
Definition priority_queue.h:485
~priority_queue()
Destructor.
Definition priority_queue.h:537
priority_queue(const priority_queue &rhs)
Copy constructor.
Definition priority_queue.h:504
priority_queue & operator=(const priority_queue &rhs)
Assignment operator.
Definition priority_queue.h:545
priority_queue()
Default constructor.
Definition priority_queue.h:496
priority_queue(TIterator first, TIterator last)
Definition priority_queue.h:528
#define ETL_ASSERT(b, e)
Definition error_handler.h:511
ETL_EXCEPTION_CONSTEXPR exception(string_type reason_, string_type, numeric_type)
Constructor.
Definition exception.h:81
bool full() const
Definition priority_queue.h:384
void pop_into(reference destination)
Definition priority_queue.h:348
bool empty() const
Definition priority_queue.h:374
size_type max_size() const
Returns the maximum number of items that can be queued.
Definition priority_queue.h:365
void assign(TIterator first, TIterator last)
Definition priority_queue.h:316
void emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition priority_queue.h:278
void push(const_reference value)
Definition priority_queue.h:175
T & reference
A reference to the type used in the queue.
Definition priority_queue.h:137
void emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition priority_queue.h:295
ipriority_queue & operator=(const ipriority_queue &rhs)
Assignment operator.
Definition priority_queue.h:409
TCompare compare_type
The comparison type.
Definition priority_queue.h:136
reference top()
Definition priority_queue.h:151
const T & const_reference
A const reference to the type used in the queue.
Definition priority_queue.h:138
T value_type
The type stored in the queue.
Definition priority_queue.h:134
size_type size() const
Returns the current number of items in the priority queue.
Definition priority_queue.h:357
void clone(const ipriority_queue &other)
Make this a clone of the supplied priority queue.
Definition priority_queue.h:440
const_reference top() const
Definition priority_queue.h:163
void clear()
Clears the queue to the empty state.
Definition priority_queue.h:401
void pop()
Definition priority_queue.h:335
void emplace(const T1 &value1)
Definition priority_queue.h:244
size_type available() const
Definition priority_queue.h:393
void emplace()
Definition priority_queue.h:227
TContainer::size_type size_type
The type used for determining the size of the queue.
Definition priority_queue.h:142
TContainer container_type
The container type used for priority queue.
Definition priority_queue.h:135
ipriority_queue()
The constructor that is called from derived classes.
Definition priority_queue.h:462
void emplace(const T1 &value1, const T2 &value2)
Definition priority_queue.h:261
This is the base for all priority queues that contain a particular type.
Definition priority_queue.h:131
Definition priority_queue.h:103
Definition priority_queue.h:61
Definition priority_queue.h:75
Definition priority_queue.h:89
bitset_ext
Definition absolute.h:40