diff options
Diffstat (limited to 'contrib/moses2/FF/LexicalReordering/HReorderingForwardState.cpp')
-rw-r--r-- | contrib/moses2/FF/LexicalReordering/HReorderingForwardState.cpp | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/contrib/moses2/FF/LexicalReordering/HReorderingForwardState.cpp b/contrib/moses2/FF/LexicalReordering/HReorderingForwardState.cpp new file mode 100644 index 000000000..c50626106 --- /dev/null +++ b/contrib/moses2/FF/LexicalReordering/HReorderingForwardState.cpp @@ -0,0 +1,87 @@ +/* + * HReorderingForwardState.cpp + * + * Created on: 22 Mar 2016 + * Author: hieu + */ + +#include "HReorderingForwardState.h" +#include "../../InputPathBase.h" +#include "../../PhraseBased/Manager.h" +#include "../../PhraseBased/Hypothesis.h" + +namespace Moses2 +{ + +HReorderingForwardState::HReorderingForwardState(const LRModel &config, + size_t offset) : + LRState(config, LRModel::Forward, offset), m_first(true) +{ + prevPath = NULL; + m_coverage = NULL; +} + +HReorderingForwardState::~HReorderingForwardState() +{ + // TODO Auto-generated destructor stub +} + +void HReorderingForwardState::Init(const LRState *prev, + const TargetPhrase<Moses2::Word> &topt, const InputPathBase &path, bool first, + const Bitmap *coverage) +{ + prevTP = &topt; + prevPath = &path; + m_first = first; + m_coverage = coverage; +} + +size_t HReorderingForwardState::hash() const +{ + size_t ret; + ret = hash_value(prevPath->range); + return ret; +} + +bool HReorderingForwardState::operator==(const FFState& o) const +{ + if (&o == this) return true; + + HReorderingForwardState const& other = + static_cast<HReorderingForwardState const&>(o); + + int compareScores = ( + (prevPath->range == other.prevPath->range) ? + ComparePrevScores(other.prevTP) : + (prevPath->range < other.prevPath->range) ? -1 : 1); + return compareScores == 0; +} + +std::string HReorderingForwardState::ToString() const +{ + return "HReorderingForwardState " + SPrint(m_offset); +} + +void HReorderingForwardState::Expand(const ManagerBase &mgr, + const LexicalReordering &ff, const Hypothesis &hypo, size_t phraseTableInd, + Scores &scores, FFState &state) const +{ + const Range &cur = hypo.GetInputPath().range; + // keep track of the current coverage ourselves so we don't need the hypothesis + Manager &mgrCast = const_cast<Manager&>(static_cast<const Manager&>(mgr)); + Bitmaps &bms = mgrCast.GetBitmaps(); + const Bitmap &cov = bms.GetBitmap(*m_coverage, cur); + + if (!m_first) { + LRModel::ReorderingType reoType; + reoType = m_configuration.GetOrientation(prevPath->range, cur, cov); + CopyScores(mgr.system, scores, hypo.GetTargetPhrase(), reoType); + } + + HReorderingForwardState &stateCast = + static_cast<HReorderingForwardState&>(state); + stateCast.Init(this, hypo.GetTargetPhrase(), hypo.GetInputPath(), false, + &cov); +} + +} /* namespace Moses2 */ |