|
#include "Stacks.h" |
|
#include "Stack.h" |
|
|
|
using namespace std; |
|
|
|
namespace Moses2 |
|
{ |
|
namespace SCFG |
|
{ |
|
Stacks::~Stacks() |
|
{ |
|
for (size_t i = 0; i < m_cells.size(); ++i) { |
|
std::vector<Stack*> &inner = m_cells[i]; |
|
for (size_t j = 0; j < inner.size(); ++j) { |
|
Stack *stack = inner[j]; |
|
delete stack; |
|
} |
|
} |
|
} |
|
|
|
void Stacks::Init(SCFG::Manager &mgr, size_t size) |
|
{ |
|
m_cells.resize(size); |
|
for (size_t startPos = 0; startPos < size; ++startPos) { |
|
std::vector<Stack*> &inner = m_cells[startPos]; |
|
inner.reserve(size - startPos); |
|
for (size_t endPos = startPos; endPos < size; ++endPos) { |
|
inner.push_back(new Stack(mgr)); |
|
} |
|
} |
|
} |
|
|
|
void Stacks::OutputStacks() const |
|
{ |
|
size_t size = m_cells.size(); |
|
|
|
for (size_t startPos = 0; startPos < size; ++startPos) { |
|
cerr.width(3); |
|
cerr << startPos << " "; |
|
} |
|
cerr << endl; |
|
for (size_t width = 1; width <= size; width++) { |
|
for( size_t space = 0; space < width-1; space++ ) { |
|
cerr << " "; |
|
} |
|
for (size_t startPos = 0; startPos <= size-width; ++startPos) { |
|
cerr.width(3); |
|
cerr << GetStack(startPos, width).GetSize() << " "; |
|
} |
|
cerr << endl; |
|
} |
|
|
|
} |
|
|
|
} |
|
} |
|
|