#pragma once #include #include #include "Cube.h" #include "SHyperedge.h" #include "SHyperedgeBundle.h" namespace Moses { namespace Syntax { class CubeQueue { public: template CubeQueue(InputIterator, InputIterator); ~CubeQueue(); SHyperedge *Pop(); bool IsEmpty() const { return m_queue.empty(); } private: class CubeOrderer { public: bool operator()(const Cube *p, const Cube *q) const { return p->Top()->label.futureScore < q->Top()->label.futureScore; } }; typedef std::priority_queue, CubeOrderer> Queue; Queue m_queue; }; template CubeQueue::CubeQueue(InputIterator first, InputIterator last) { while (first != last) { m_queue.push(new Cube(*first++)); } } } // Syntax } // Moses