|
#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); |
|
} |
|
} |
|
|
|
} |
|
} |
|
} |
|
|