| #include "HyperTree.h" |
|
|
| namespace Moses |
| { |
| namespace Syntax |
| { |
| namespace F2S |
| { |
|
|
| void HyperTree::Node::Prune(std::size_t tableLimit) |
| { |
| |
| for (Map::iterator p = m_map.begin(); p != m_map.end(); ++p) { |
| p->second.Prune(tableLimit); |
| } |
| |
| m_targetPhraseCollection->Prune(true, tableLimit); |
| } |
|
|
| void HyperTree::Node::Sort(std::size_t tableLimit) |
| { |
| |
| for (Map::iterator p = m_map.begin(); p != m_map.end(); ++p) { |
| p->second.Sort(tableLimit); |
| } |
| |
| m_targetPhraseCollection->Sort(true, tableLimit); |
| } |
|
|
| HyperTree::Node *HyperTree::Node::GetOrCreateChild( |
| const HyperPath::NodeSeq &nodeSeq) |
| { |
| return &m_map[nodeSeq]; |
| } |
|
|
| const HyperTree::Node *HyperTree::Node::GetChild( |
| const HyperPath::NodeSeq &nodeSeq) const |
| { |
| Map::const_iterator p = m_map.find(nodeSeq); |
| return (p == m_map.end()) ? NULL : &p->second; |
| } |
|
|
| TargetPhraseCollection::shared_ptr HyperTree::GetOrCreateTargetPhraseCollection( |
| const HyperPath &hyperPath) |
| { |
| Node &node = GetOrCreateNode(hyperPath); |
| return node.GetTargetPhraseCollection(); |
| } |
|
|
| HyperTree::Node &HyperTree::GetOrCreateNode(const HyperPath &hyperPath) |
| { |
| const std::size_t height = hyperPath.nodeSeqs.size(); |
| Node *node = &m_root; |
| for (std::size_t i = 0; i < height; ++i) { |
| const HyperPath::NodeSeq &nodeSeq = hyperPath.nodeSeqs[i]; |
| node = node->GetOrCreateChild(nodeSeq); |
| } |
| return *node; |
| } |
|
|
| void HyperTree::SortAndPrune(std::size_t tableLimit) |
| { |
| if (tableLimit) { |
| m_root.Sort(tableLimit); |
| } |
| } |
|
|
| } |
| } |
| } |
|
|