diff options
Diffstat (limited to 'moses2/SCFG/ActiveChart.cpp')
-rw-r--r-- | moses2/SCFG/ActiveChart.cpp | 109 |
1 files changed, 109 insertions, 0 deletions
diff --git a/moses2/SCFG/ActiveChart.cpp b/moses2/SCFG/ActiveChart.cpp new file mode 100644 index 000000000..fb4d84bfb --- /dev/null +++ b/moses2/SCFG/ActiveChart.cpp @@ -0,0 +1,109 @@ +#include <boost/foreach.hpp> +#include <boost/functional/hash_fwd.hpp> +#include "ActiveChart.h" +#include "InputPath.h" +#include "Word.h" +#include "Hypothesis.h" +#include "../Vector.h" + +using namespace std; + +namespace Moses2 +{ +namespace SCFG +{ +SymbolBindElement::SymbolBindElement() +{ +} + +SymbolBindElement::SymbolBindElement( + const Moses2::Range &range, + const SCFG::Word &word, + const Moses2::Hypotheses *hypos) + :m_range(&range) + ,word(&word) + ,hypos(hypos) +{ + assert( (word.isNonTerminal && hypos) || (!word.isNonTerminal && hypos == NULL)); +} + +size_t hash_value(const SymbolBindElement &obj) +{ + size_t ret = (size_t) obj.hypos; + boost::hash_combine(ret, obj.word); + + return ret; +} + +std::string SymbolBindElement::Debug(const System &system) const +{ + stringstream out; + out << "("; + out << *m_range; + out << word->Debug(system); + out << ")"; + + return out.str(); +} + +//////////////////////////////////////////////////////////////////////////// +SymbolBind::SymbolBind(MemPool &pool) + :coll(pool) + ,numNT(0) +{ +} + +void SymbolBind::Add(const Range &range, const SCFG::Word &word, const Moses2::Hypotheses *hypos) +{ + SymbolBindElement ele(range, word, hypos); + coll.push_back(ele); + + if (word.isNonTerminal) { + ++numNT; + } +} + +std::vector<const SymbolBindElement*> SymbolBind::GetNTElements() const +{ + std::vector<const SymbolBindElement*> ret; + + for (size_t i = 0; i < coll.size(); ++i) { + const SymbolBindElement &ele = coll[i]; + //cerr << "ele=" << ele.word->isNonTerminal << " " << ele.hypos << endl; + + if (ele.word->isNonTerminal) { + ret.push_back(&ele); + } + } + + return ret; +} + +std::string SymbolBind::Debug(const System &system) const +{ + stringstream out; + BOOST_FOREACH(const SymbolBindElement &ele, coll) { + out << ele.Debug(system) << " "; + } + return out.str(); +} +//////////////////////////////////////////////////////////////////////////// +ActiveChartEntry::ActiveChartEntry(MemPool &pool) + :m_symbolBind(pool) +{ +} + +//////////////////////////////////////////////////////////////////////////// +ActiveChart::ActiveChart(MemPool &pool) + :entries(pool) +{ +} + +ActiveChart::~ActiveChart() +{ + +} + +} +} + |