4#ifndef _Stroika_Foundation_Containers_PriorityQueue_h_
5#define _Stroika_Foundation_Containers_PriorityQueue_h_ 1
7#include "Stroika/Foundation/StroikaPreComp.h"
9#include "Stroika/Foundation/Common/Common.h"
10#include "Stroika/Foundation/Containers/Common.h"
42 using Traversal::Iterable;
43 using Traversal::Iterator;
46 const Priority kMinPriority = kMinUInt16;
47 const Priority kMaxPriority = kMaxUInt16;
53 PQEntry (T item, Priority p);
59 Boolean operator== (
const PQEntry<T>& lhs,
const PQEntry<T>& rhs);
83 class PriorityQueue :
public Iterable<pair<T, Priority>> {
91 using ArchetypeContainerType = PriorityQueue;
97 PriorityQueue (
const PriorityQueue&
src) =
default;
100 explicit PriorityQueue (
const shared_ptr<_IRep>& rep);
102#if qStroika_Foundation_Debug_AssertionsChecked
114 nonvirtual
void RemoveAll ();
123 nonvirtual T Dequeue ();
126 nonvirtual T Head ()
const;
129 nonvirtual
Priority TopPriority ()
const;
132 nonvirtual
void RemoveHead ();
140 nonvirtual
const _IRep& _ConstGetRep ()
const;
143 nonvirtual
const _IRep& _GetRep ()
const;
144 nonvirtual _IRep& _GetRep ();
153 template <
typename T>
162 virtual shared_ptr<_IRep> CloneEmpty ()
const = 0;
164 virtual T Dequeue () = 0;
165 virtual T Head ()
const = 0;
176#include "PriorityQueue.inl"
Implementation detail for PriorityQueue<T> implementors.
Iterable<T> is a base class for containers which easily produce an Iterator<T> to traverse them.
nonvirtual CONTAINER_OF_T As(CONTAINER_OF_T_CONSTRUCTOR_ARGS... args) const