mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2024-10-27 11:59:52 +03:00
d317fdc373
This mirrors the change made for the chart decoder in commit 465b4756...
53 lines
840 B
C++
53 lines
840 B
C++
#pragma once
|
|
|
|
#include <queue>
|
|
#include <vector>
|
|
|
|
#include "Cube.h"
|
|
#include "SHyperedge.h"
|
|
#include "SHyperedgeBundle.h"
|
|
|
|
namespace Moses
|
|
{
|
|
namespace Syntax
|
|
{
|
|
|
|
class CubeQueue
|
|
{
|
|
public:
|
|
template<typename InputIterator>
|
|
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<Cube*, std::vector<Cube*>, CubeOrderer> Queue;
|
|
|
|
Queue m_queue;
|
|
};
|
|
|
|
template<typename InputIterator>
|
|
CubeQueue::CubeQueue(InputIterator first, InputIterator last)
|
|
{
|
|
while (first != last) {
|
|
m_queue.push(new Cube(*first++));
|
|
}
|
|
}
|
|
|
|
} // Syntax
|
|
} // Moses
|