/* * Stack.h * * Created on: 24 Oct 2015 * Author: hieu */ #pragma once #include #include #include #include "../Hypothesis.h" #include "../../TypeDef.h" #include "../../Vector.h" #include "../../MemPool.h" #include "../../Recycler.h" #include "../../legacy/Util2.h" namespace Moses2 { class Manager; namespace NSCubePruningBitmapStack { typedef Vector Hypotheses; class MiniStack { public: typedef boost::unordered_set, UnorderedComparer > _HCType; MiniStack(const Manager &mgr); StackAdd Add(const Hypothesis *hypo); _HCType &GetColl() { return m_coll; } const _HCType &GetColl() const { return m_coll; } void Clear(); Hypotheses &GetSortedAndPruneHypos(const Manager &mgr) const; protected: _HCType m_coll; mutable Hypotheses *m_sortedHypos; void SortAndPruneHypos(const Manager &mgr) const; }; ///////////////////////////////////////////// class Stack { protected: public: typedef std::pair HypoCoverage; // bitmap and current endPos of hypos typedef boost::unordered_map SortedHypos; typedef const Bitmap* HypoCoverageInternal; typedef boost::unordered_map ,std::equal_to > Coll; Stack(const Manager &mgr); virtual ~Stack(); size_t GetHypoSize() const; Coll &GetColl() { return m_coll; } const Coll &GetColl() const { return m_coll; } void Add(const Hypothesis *hypo, Recycler &hypoRecycle); MiniStack &GetMiniStack(const HypoCoverageInternal &key); std::vector GetBestHypos(size_t num) const; void Clear(); SortedHypos GetSortedAndPruneHypos(const Manager &mgr) const; void SortAndPruneHypos(const Manager &mgr, Hypotheses &hypos) const; void DebugCounts(); protected: const Manager &m_mgr; Coll m_coll; std::deque m_miniStackRecycler; }; } }