31 #ifndef ETL_PRIORITY_QUEUE_INCLUDED
32 #define ETL_PRIORITY_QUEUE_INCLUDED
69 :
exception(reason_, file_name_, line_number_)
118 template <
typename T,
typename TContainer,
typename TCompare = etl::less<T> >
128 #if ETL_CPP11_SUPPORTED
129 typedef T&& rvalue_reference;
132 typedef typename etl::iterator_traits<typename TContainer::iterator>::difference_type difference_type;
140 return container.front();
149 return container.front();
163 container.push_back(value);
165 etl::push_heap(container.begin(), container.end(),
compare);
168 #if ETL_CPP11_SUPPORTED
175 void push(rvalue_reference value)
180 container.push_back(etl::move(value));
182 etl::push_heap(container.begin(), container.end(),
compare);
186 #if ETL_CPP11_SUPPORTED && ETL_NOT_USING_STLPORT && !defined(ETL_PRIORITY_QUEUE_FORCE_CPP03)
193 template <
typename ... Args>
199 container.emplace_back(etl::forward<Args>(args)...);
201 etl::push_heap(container.begin(), container.end(), compare);
210 template <
typename T1>
216 container.emplace_back(value1);
218 etl::push_heap(container.begin(), container.end(),
compare);
227 template <
typename T1,
typename T2>
228 void emplace(
const T1& value1,
const T2& value2)
233 container.emplace_back(value1, value2);
235 etl::push_heap(container.begin(), container.end(),
compare);
244 template <
typename T1,
typename T2,
typename T3>
245 void emplace(
const T1& value1,
const T2& value2,
const T3& value3)
250 container.emplace_back(value1, value2, value3);
252 etl::push_heap(container.begin(), container.end(),
compare);
261 template <
typename T1,
typename T2,
typename T3,
typename T4>
262 void emplace(
const T1& value1,
const T2& value2,
const T3& value3,
const T4& value4)
267 container.emplace_back(value1, value2, value3, value4);
269 etl::push_heap(container.begin(), container.end(),
compare);
282 template <
typename TIterator>
283 void assign(TIterator first, TIterator last)
285 #if defined(ETL_DEBUG)
286 difference_type d = etl::distance(first, last);
292 container.assign(first, last);
293 etl::make_heap(container.begin(), container.end(),
compare);
303 etl::pop_heap(container.begin(), container.end(),
compare);
305 container.pop_back();
323 return container.size();
331 return container.max_size();
340 return container.empty();
349 return container.size() == container.max_size();
358 return container.max_size() - container.size();
376 assign(other.container.cbegin(), other.container.cend());
379 #if ETL_CPP11_SUPPORTED
385 while (!other.empty())
387 push(etl::move(other.top()));
406 TContainer container;
418 template <
typename T, const
size_t SIZE,
typename TContainer = etl::vector<T, SIZE>,
typename TCompare = etl::less<
typename TContainer::value_type> >
423 typedef typename TContainer::size_type size_type;
425 static const size_type MAX_SIZE = size_type(SIZE);
444 #if ETL_CPP11_SUPPORTED
461 template <
typename TIterator>
489 #if ETL_CPP11_SUPPORTED
Definition: priority_queue.h:420
~priority_queue()
Destructor.
Definition: priority_queue.h:471
priority_queue(const priority_queue &rhs)
Copy constructor.
Definition: priority_queue.h:438
priority_queue & operator=(const priority_queue &rhs)
Assignment operator.
Definition: priority_queue.h:479
priority_queue()
Default constructor.
Definition: priority_queue.h:430
priority_queue(TIterator first, TIterator last)
Definition: priority_queue.h:462
#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
bool full() const
Definition: priority_queue.h:347
void pop_into(reference destination)
Definition: priority_queue.h:312
bool empty() const
Definition: priority_queue.h:338
size_type max_size() const
Returns the maximum number of items that can be queued.
Definition: priority_queue.h:329
void assign(TIterator first, TIterator last)
Definition: priority_queue.h:283
void emplace(const T1 &value1, const T2 &value2, const T3 &value3)
Definition: priority_queue.h:245
void push(const_reference value)
Definition: priority_queue.h:158
T & reference
A reference to the type used in the queue.
Definition: priority_queue.h:126
void emplace(const T1 &value1, const T2 &value2, const T3 &value3, const T4 &value4)
Definition: priority_queue.h:262
TCompare compare_type
The comparison type.
Definition: priority_queue.h:125
reference top()
Definition: priority_queue.h:138
const T & const_reference
A const reference to the type used in the queue.
Definition: priority_queue.h:127
T value_type
The type stored in the queue.
Definition: priority_queue.h:123
size_type size() const
Returns the current number of items in the priority queue.
Definition: priority_queue.h:321
void clone(const ipriority_queue &other)
Make this a clone of the supplied priority queue.
Definition: priority_queue.h:374
const_reference top() const
Definition: priority_queue.h:147
void clear()
Clears the queue to the empty state.
Definition: priority_queue.h:364
void pop()
Definition: priority_queue.h:300
void emplace(const T1 &value1)
Definition: priority_queue.h:211
size_type available() const
Definition: priority_queue.h:356
TContainer::size_type size_type
The type used for determining the size of the queue.
Definition: priority_queue.h:131
TContainer container_type
The container type used for priority queue.
Definition: priority_queue.h:124
ipriority_queue()
The constructor that is called from derived classes.
Definition: priority_queue.h:396
void emplace(const T1 &value1, const T2 &value2)
Definition: priority_queue.h:228
This is the base for all priority queues that contain a particular type.
Definition: priority_queue.h:120
Definition: priority_queue.h:65
Definition: priority_queue.h:79
Definition: priority_queue.h:93
Definition: absolute.h:37