| | #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; |
| | }; |
| |
|
| | } |
| | } |
| |
|
| |
|