mosesdecoder/moses2/HypothesisColl.h
2024-03-18 12:22:57 -07:00

76 lines
1.6 KiB
C++

/*
* HypothesisColl.h
*
* Created on: 26 Feb 2016
* Author: hieu
*/
#pragma once
#include <unordered_set>
#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 std::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 */