|
#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; |
|
|
|
|
|
|
|
|
|
class SymbolBindElement |
|
{ |
|
public: |
|
const SCFG::Word *word; |
|
|
|
const Moses2::Hypotheses *hypos; |
|
|
|
SymbolBindElement(); |
|
SymbolBindElement(const Moses2::Range &range, const SCFG::Word &word, const Moses2::Hypotheses *hypos); |
|
|
|
const Range &GetRange() const { |
|
return *m_range; |
|
} |
|
|
|
bool operator==(const SymbolBindElement &compare) const { |
|
bool ret = hypos == compare.hypos |
|
&& word == compare.word; |
|
return ret; |
|
} |
|
|
|
std::string Debug(const System &system) const; |
|
|
|
protected: |
|
const Moses2::Range *m_range; |
|
|
|
}; |
|
|
|
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) |
|
{} |
|
|
|
size_t GetSize() const { |
|
return coll.size(); |
|
} |
|
|
|
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()) { |
|
|
|
} |
|
|
|
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; |
|
}; |
|
|
|
} |
|
} |
|
|
|
|