ChartTrellisNode::ChartTrellisNode(const ChartTrellisDetour &detour, ChartTrellisNode *&deviationPoint) : m_hypo((&detour.GetBasePath().GetFinalNode() == &detour.GetSubstitutedNode()) ? detour.GetReplacementHypo() : detour.GetBasePath().GetFinalNode().GetHypothesis()) { if (&m_hypo == &detour.GetReplacementHypo()) { deviationPoint = this; CreateChildren(); } else { CreateChildren(detour.GetBasePath().GetFinalNode(), detour.GetSubstitutedNode(), detour.GetReplacementHypo(), deviationPoint); } }
ChartTrellisPath::ChartTrellisPath(const ChartTrellisDetour &detour) : m_finalNode(new ChartTrellisNode(detour, m_deviationPoint)) , m_scoreBreakdown(detour.GetBasePath().m_scoreBreakdown) , m_totalScore(0) { UTIL_THROW_IF(m_deviationPoint == NULL, util::Exception, "No deviation point"); ScoreComponentCollection scoreChange; scoreChange = detour.GetReplacementHypo().GetScoreBreakdown(); scoreChange.MinusEquals(detour.GetSubstitutedNode().GetHypothesis().GetScoreBreakdown()); m_scoreBreakdown.PlusEquals(scoreChange); m_totalScore = m_scoreBreakdown.GetWeightedScore(); }