|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "Stacks.h" |
|
#include "../../System.h" |
|
#include "../Manager.h" |
|
|
|
using namespace std; |
|
|
|
namespace Moses2 |
|
{ |
|
|
|
namespace NSCubePruningPerBitmap |
|
{ |
|
|
|
Stacks::Stacks(const Manager &mgr) |
|
:m_mgr(mgr) |
|
{ |
|
} |
|
|
|
Stacks::~Stacks() |
|
{ |
|
} |
|
|
|
void Stacks::Init(size_t numStacks) |
|
{ |
|
m_stacks.resize(numStacks); |
|
for (size_t i = 0; i < m_stacks.size(); ++i) { |
|
m_stacks[i] = new (m_mgr.GetPool().Allocate<NSCubePruningMiniStack::Stack>()) NSCubePruningMiniStack::Stack(m_mgr); |
|
} |
|
} |
|
|
|
|
|
std::ostream& operator<<(std::ostream &out, const Stacks &obj) |
|
{ |
|
for (size_t i = 0; i < obj.GetSize(); ++i) { |
|
const NSCubePruningMiniStack::Stack &stack = *obj.m_stacks[i]; |
|
out << stack.GetHypoSize() << " "; |
|
} |
|
|
|
return out; |
|
} |
|
|
|
void Stacks::Add(const Hypothesis *hypo, Recycler<Hypothesis*> &hypoRecycle) |
|
{ |
|
size_t numWordsCovered = hypo->GetBitmap().GetNumWordsCovered(); |
|
|
|
NSCubePruningMiniStack::Stack &stack = *m_stacks[numWordsCovered]; |
|
stack.Add(hypo, hypoRecycle); |
|
|
|
} |
|
|
|
NSCubePruningMiniStack::MiniStack &Stacks::GetMiniStack(const Bitmap &newBitmap, const Range &pathRange) |
|
{ |
|
size_t numWordsCovered = newBitmap.GetNumWordsCovered(); |
|
|
|
NSCubePruningMiniStack::Stack &stack = *m_stacks[numWordsCovered]; |
|
|
|
NSCubePruningMiniStack::Stack::HypoCoverage key(&newBitmap, pathRange.GetEndPos()); |
|
stack.GetMiniStack(key); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|