Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/moses-smt/mosesdecoder.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/moses2/defer/CubePruningBitmapStack/Stack.h')
-rw-r--r--contrib/moses2/defer/CubePruningBitmapStack/Stack.h109
1 files changed, 109 insertions, 0 deletions
diff --git a/contrib/moses2/defer/CubePruningBitmapStack/Stack.h b/contrib/moses2/defer/CubePruningBitmapStack/Stack.h
new file mode 100644
index 000000000..d0687ec59
--- /dev/null
+++ b/contrib/moses2/defer/CubePruningBitmapStack/Stack.h
@@ -0,0 +1,109 @@
+/*
+ * Stack.h
+ *
+ * Created on: 24 Oct 2015
+ * Author: hieu
+ */
+#pragma once
+#include <boost/unordered_map.hpp>
+#include <boost/unordered_set.hpp>
+#include <deque>
+#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<const Hypothesis*> Hypotheses;
+
+class MiniStack
+{
+public:
+ typedef boost::unordered_set<const Hypothesis*,
+ UnorderedComparer<Hypothesis>,
+ UnorderedComparer<Hypothesis>
+ > _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<const Bitmap*, size_t> HypoCoverage;
+ // bitmap and current endPos of hypos
+ typedef boost::unordered_map<HypoCoverage, Hypotheses*> SortedHypos;
+
+ typedef const Bitmap* HypoCoverageInternal;
+ typedef boost::unordered_map<HypoCoverageInternal, MiniStack*
+ ,boost::hash<HypoCoverageInternal>
+ ,std::equal_to<HypoCoverageInternal>
+ > 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<Hypothesis*> &hypoRecycle);
+
+ MiniStack &GetMiniStack(const HypoCoverageInternal &key);
+
+ std::vector<const Hypothesis*> 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<MiniStack*> m_miniStackRecycler;
+
+
+};
+
+}
+
+}
+
+