diff options
Diffstat (limited to 'moses2/HypothesisColl.h')
-rw-r--r-- | moses2/HypothesisColl.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/moses2/HypothesisColl.h b/moses2/HypothesisColl.h new file mode 100644 index 000000000..63a8551ba --- /dev/null +++ b/moses2/HypothesisColl.h @@ -0,0 +1,74 @@ +/* + * HypothesisColl.h + * + * Created on: 26 Feb 2016 + * Author: hieu + */ +#pragma once +#include <boost/unordered_set.hpp> +#include "HypothesisBase.h" +#include "MemPoolAllocator.h" +#include "Recycler.h" +#include "Array.h" +#include "legacy/Util2.h" + +namespace Moses2 +{ + +class ManagerBase; +class ArcLists; + +typedef Array<const HypothesisBase*> Hypotheses; + +class HypothesisColl +{ +public: + HypothesisColl(const ManagerBase &mgr); + + void Add(const ManagerBase &mgr, + HypothesisBase *hypo, + Recycler<HypothesisBase*> &hypoRecycle, + ArcLists &arcLists); + + size_t GetSize() const { + return m_coll.size(); + } + + void Clear(); + + const Hypotheses &GetSortedAndPrunedHypos( + const ManagerBase &mgr, + ArcLists &arcLists) const; + + const HypothesisBase *GetBestHypo() const; + + template<typename T> + const T *GetBestHypo() const { + const HypothesisBase *hypo = GetBestHypo(); + return hypo ? &hypo->Cast<T>() : NULL; + } + + void Delete(const HypothesisBase *hypo); + + std::string Debug(const System &system) const; + +protected: + typedef boost::unordered_set<const HypothesisBase*, + UnorderedComparer<HypothesisBase>, UnorderedComparer<HypothesisBase>, + MemPoolAllocator<const HypothesisBase*> > _HCType; + + _HCType m_coll; + mutable Hypotheses *m_sortedHypos; + + SCORE m_bestScore; + SCORE m_worstScore; + + StackAdd Add(const HypothesisBase *hypo); + + void PruneHypos(const ManagerBase &mgr, ArcLists &arcLists); + void SortHypos(const ManagerBase &mgr, const HypothesisBase **sortedHypos) const; + +}; + +} /* namespace Moses2 */ + |