|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once |
|
|
|
#include <boost/ptr_container/ptr_vector.hpp> |
|
#include "InputType.h" |
|
#include "ChartCell.h" |
|
#include "Range.h" |
|
#include "InputPath.h" |
|
|
|
namespace Moses |
|
{ |
|
class InputType; |
|
class ChartManager; |
|
class ChartParser; |
|
|
|
class ChartCellCollectionBase |
|
{ |
|
public: |
|
template <class Factory> ChartCellCollectionBase(const InputType &input, |
|
const Factory &factory, |
|
const ChartParser &parser) |
|
:m_cells(input.GetSize()) { |
|
|
|
size_t size = input.GetSize(); |
|
for (size_t startPos = 0; startPos < size; ++startPos) { |
|
std::vector<ChartCellBase*> &inner = m_cells[startPos]; |
|
inner.reserve(size - startPos); |
|
for (size_t endPos = startPos; endPos < size; ++endPos) { |
|
inner.push_back(factory(startPos, endPos)); |
|
} |
|
|
|
|
|
|
|
|
|
const Range &range = inner[0]->GetCoverage(); |
|
|
|
m_source.push_back(new ChartCellLabel(range, input.GetWord(startPos))); |
|
} |
|
} |
|
|
|
virtual ~ChartCellCollectionBase(); |
|
|
|
|
|
const ChartCellBase &GetBase(const Range &coverage) const { |
|
return *m_cells[coverage.GetStartPos()][coverage.GetEndPos() - coverage.GetStartPos()]; |
|
} |
|
|
|
ChartCellBase &MutableBase(const Range &coverage) { |
|
return *m_cells[coverage.GetStartPos()][coverage.GetEndPos() - coverage.GetStartPos()]; |
|
} |
|
|
|
|
|
const ChartCellLabel &GetSourceWordLabel(size_t at) const { |
|
return m_source[at]; |
|
} |
|
|
|
private: |
|
std::vector<std::vector<ChartCellBase*> > m_cells; |
|
|
|
boost::ptr_vector<ChartCellLabel> m_source; |
|
|
|
}; |
|
|
|
|
|
|
|
class ChartCellCollection : public ChartCellCollectionBase |
|
{ |
|
public: |
|
ChartCellCollection(const InputType &input, ChartManager &manager); |
|
|
|
|
|
ChartCell &Get(const Range &coverage) { |
|
return static_cast<ChartCell&>(MutableBase(coverage)); |
|
} |
|
|
|
|
|
const ChartCell &Get(const Range &coverage) const { |
|
return static_cast<const ChartCell&>(GetBase(coverage)); |
|
} |
|
}; |
|
|
|
} |
|
|
|
|