00001 #pragma once
00002
00003 #include <queue>
00004 #include <vector>
00005
00006 #include "Cube.h"
00007 #include "SHyperedge.h"
00008 #include "SHyperedgeBundle.h"
00009
00010 namespace Moses
00011 {
00012 namespace Syntax
00013 {
00014
00015 class CubeQueue
00016 {
00017 public:
00018 template<typename InputIterator>
00019 CubeQueue(InputIterator, InputIterator);
00020
00021 ~CubeQueue();
00022
00023 SHyperedge *Pop();
00024
00025 bool IsEmpty() const {
00026 return m_queue.empty();
00027 }
00028
00029 private:
00030 class CubeOrderer
00031 {
00032 public:
00033 bool operator()(const Cube *p, const Cube *q) const {
00034 return p->Top()->label.futureScore < q->Top()->label.futureScore;
00035 }
00036 };
00037
00038 typedef std::priority_queue<Cube*, std::vector<Cube*>, CubeOrderer> Queue;
00039
00040 Queue m_queue;
00041 };
00042
00043 template<typename InputIterator>
00044 CubeQueue::CubeQueue(InputIterator first, InputIterator last)
00045 {
00046 while (first != last) {
00047 m_queue.push(new Cube(*first++));
00048 }
00049 }
00050
00051 }
00052 }