mirror of
https://github.com/moses-smt/mosesdecoder.git
synced 2025-01-06 19:49:41 +03:00
113 lines
2.4 KiB
C++
113 lines
2.4 KiB
C++
#pragma once
|
|
#include <vector>
|
|
#include <iostream>
|
|
#include <boost/functional/hash/hash.hpp>
|
|
#include "../legacy/Range.h"
|
|
#include "../HypothesisColl.h"
|
|
|
|
namespace Moses2
|
|
{
|
|
class System;
|
|
class PhraseTable;
|
|
|
|
namespace SCFG
|
|
{
|
|
class InputPath;
|
|
class Word;
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//! The range covered by each symbol in the source
|
|
//! Terminals will cover only 1 word, NT can cover multiple words
|
|
class SymbolBindElement
|
|
{
|
|
public:
|
|
const SCFG::Word *word;
|
|
const Moses2::Hypotheses *hypos;
|
|
|
|
SymbolBindElement();
|
|
SymbolBindElement(const SCFG::Word *word, const Moses2::Hypotheses *hypos);
|
|
|
|
bool operator==(const SymbolBindElement &compare) const
|
|
{
|
|
bool ret = hypos == compare.hypos
|
|
&& word == compare.word;
|
|
return ret;
|
|
}
|
|
};
|
|
|
|
size_t hash_value(const SymbolBindElement &obj);
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
class SymbolBind
|
|
{
|
|
public:
|
|
typedef Vector<SymbolBindElement> Coll;
|
|
Coll coll;
|
|
size_t numNT;
|
|
|
|
SymbolBind(MemPool &pool);
|
|
|
|
SymbolBind(MemPool &pool, const SymbolBind ©)
|
|
:coll(copy.coll)
|
|
,numNT(copy.numNT)
|
|
{}
|
|
|
|
std::vector<const SymbolBindElement*> GetNTElements() const;
|
|
|
|
void Add(const Range &range, const SCFG::Word &word, const Moses2::Hypotheses *hypos);
|
|
|
|
bool operator==(const SymbolBind &compare) const
|
|
{ return coll == compare.coll; }
|
|
|
|
std::string Debug(const System &system) const;
|
|
|
|
};
|
|
|
|
inline size_t hash_value(const SymbolBind &obj)
|
|
{
|
|
return boost::hash_value(obj.coll);
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
class ActiveChartEntry
|
|
{
|
|
public:
|
|
ActiveChartEntry(MemPool &pool);
|
|
|
|
ActiveChartEntry(MemPool &pool, const ActiveChartEntry &prevEntry)
|
|
:m_symbolBind(pool, prevEntry.GetSymbolBind())
|
|
{
|
|
//symbolBinds = new (pool.Allocate<SymbolBind>()) SymbolBind(pool, *prevEntry.symbolBinds);
|
|
}
|
|
|
|
const SymbolBind &GetSymbolBind() const
|
|
{ return m_symbolBind; }
|
|
|
|
virtual void AddSymbolBindElement(
|
|
const Range &range,
|
|
const SCFG::Word &word,
|
|
const Moses2::Hypotheses *hypos,
|
|
const PhraseTable &pt)
|
|
{
|
|
m_symbolBind.Add(range, word, hypos);
|
|
}
|
|
|
|
protected:
|
|
SymbolBind m_symbolBind;
|
|
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
class ActiveChart
|
|
{
|
|
public:
|
|
ActiveChart(MemPool &pool);
|
|
~ActiveChart();
|
|
|
|
Vector<ActiveChartEntry*> entries;
|
|
};
|
|
|
|
}
|
|
}
|
|
|