#pragma once #include #include #include #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 Coll; Coll coll; size_t numNT; SymbolBind(MemPool &pool); SymbolBind(MemPool &pool, const SymbolBind ©) :coll(copy.coll) ,numNT(copy.numNT) {} std::vector 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(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 entries; }; } }