src/ell/util/PriorityQueue.hh
Go to the documentation of this file.00001 #ifndef PRIORITYQUEUE_HH_ 00002 #define PRIORITYQUEUE_HH_ 00003 00004 #include <map> 00005 #include <set> 00006 00007 #include "ell/State.hh" 00008 00009 namespace ell { 00010 namespace util { 00011 00013 class QueueKey { 00014 public: 00016 double E; 00018 CSequence s; 00021 bool operator<(const QueueKey& toCompare) const; 00022 00023 QueueKey(); 00024 QueueKey(const double E, const CSequence& s); 00025 ~QueueKey(); 00026 }; 00027 00033 template<class QV // QueueValue of PriorityQueue_ as template parameter 00034 , class QK = QueueKey // QueueKey with default 00035 , typename CompareKey = std::less<QK> > // comparison operator 00036 class PriorityQueue 00037 { 00038 public: 00039 00040 // access to the template arguments 00041 typedef QV QueueValue; 00042 typedef QK QueueKey; 00043 00044 protected: 00046 typedef typename std::map< QK, QV, CompareKey > InternalPQtype; 00047 00049 InternalPQtype pq; 00050 00051 public: 00052 00054 typedef typename InternalPQtype::const_iterator const_iterator; 00056 typedef typename InternalPQtype::iterator iterator; 00058 typedef typename InternalPQtype::size_type size_type; 00060 typedef typename std::pair<iterator, bool> InsertResult; 00061 00063 PriorityQueue(); 00065 virtual ~PriorityQueue(); 00066 00068 const_iterator begin(void) const; 00070 const_iterator end(void) const; 00071 00073 iterator begin(void); 00075 iterator end(void); 00076 00078 const_iterator top(void) const; 00079 00081 void pop(void); 00082 00085 size_type size(void) const; 00086 00089 bool empty(void) const; 00090 00095 const_iterator find(const State* s) const; 00100 iterator find(const State* s); 00105 const_iterator find(const QK& key) const; 00110 iterator find(const QK& key); 00111 00121 InsertResult insert(const State* keyState); 00131 InsertResult insert(const QK& key); 00132 00135 void erase(const State* s); 00138 void erase(const QK& key); 00139 00142 double getMaxE(void) const; 00143 00147 void reduceMaxE(const double maxE); 00148 00149 }; 00150 00151 } // namespace util 00152 } // namespace ell 00153 00154 #include "ell/util/PriorityQueue.icc" 00155 00156 #endif /*PRIORITYQUEUE_HH_*/