| |
| |
| |
| |
| |
| |
|
|
| #include "HReorderingBackwardState.h" |
| #include "../../PhraseBased/Hypothesis.h" |
| #include "../../PhraseBased/Manager.h" |
|
|
| namespace Moses2 |
| { |
|
|
| HReorderingBackwardState::HReorderingBackwardState(MemPool &pool, |
| const LRModel &config, size_t offset) : |
| LRState(config, LRModel::Backward, offset), reoStack(pool) |
| { |
| |
|
|
| } |
|
|
| HReorderingBackwardState::~HReorderingBackwardState() |
| { |
| |
| } |
|
|
| void HReorderingBackwardState::Init(const LRState *prev, |
| const TargetPhrase<Moses2::Word> &topt, const InputPathBase &path, bool first, |
| const Bitmap *coverage) |
| { |
| prevTP = &topt; |
| reoStack.Init(); |
| } |
|
|
| size_t HReorderingBackwardState::hash() const |
| { |
| size_t ret = reoStack.hash(); |
| return ret; |
| } |
|
|
| bool HReorderingBackwardState::operator==(const FFState& o) const |
| { |
| const HReorderingBackwardState& other = |
| static_cast<const HReorderingBackwardState&>(o); |
| bool ret = reoStack == other.reoStack; |
| return ret; |
| } |
|
|
| std::string HReorderingBackwardState::ToString() const |
| { |
| return "HReorderingBackwardState " + SPrint(m_offset); |
| } |
|
|
| void HReorderingBackwardState::Expand(const ManagerBase &mgr, |
| const LexicalReordering &ff, const Hypothesis &hypo, size_t phraseTableInd, |
| Scores &scores, FFState &state) const |
| { |
| HReorderingBackwardState &nextState = |
| static_cast<HReorderingBackwardState&>(state); |
| nextState.Init(this, hypo.GetTargetPhrase(), hypo.GetInputPath(), false, |
| NULL); |
| nextState.reoStack = reoStack; |
|
|
| const Range &swrange = hypo.GetInputPath().range; |
| int reoDistance = nextState.reoStack.ShiftReduce(swrange); |
| ReorderingType reoType = m_configuration.GetOrientation(reoDistance); |
| CopyScores(mgr.system, scores, hypo.GetTargetPhrase(), reoType); |
| } |
|
|
| } |
|
|