| #pragma once |
|
|
| #include "moses/Syntax/BoundedPriorityContainer.h" |
| #include "moses/Syntax/PHyperedge.h" |
| #include "moses/Syntax/PVertex.h" |
| #include "moses/Syntax/SHyperedgeBundle.h" |
| #include "moses/Syntax/SHyperedgeBundleScorer.h" |
|
|
| #include "PHyperedgeToSHyperedgeBundle.h" |
| #include "PVertexToStackMap.h" |
|
|
| namespace Moses |
| { |
| namespace Syntax |
| { |
| namespace F2S |
| { |
|
|
| class RuleMatcherCallback |
| { |
| private: |
| typedef BoundedPriorityContainer<SHyperedgeBundle> Container; |
|
|
| public: |
| RuleMatcherCallback(const PVertexToStackMap &stackMap, std::size_t ruleLimit) |
| : m_stackMap(stackMap) |
| , m_container(ruleLimit) {} |
|
|
| void operator()(const PHyperedge &hyperedge) { |
| PHyperedgeToSHyperedgeBundle(hyperedge, m_stackMap, m_tmpBundle); |
| float score = SHyperedgeBundleScorer::Score(m_tmpBundle); |
| m_container.SwapIn(m_tmpBundle, score); |
| } |
|
|
| void ClearContainer() { |
| m_container.LazyClear(); |
| } |
|
|
| const Container &GetContainer() { |
| return m_container; |
| } |
|
|
| private: |
| const PVertexToStackMap &m_stackMap; |
| SHyperedgeBundle m_tmpBundle; |
| BoundedPriorityContainer<SHyperedgeBundle> m_container; |
| }; |
|
|
| } |
| } |
| } |
|
|