| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #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)); |
| } |
| }; |
|
|
| } |
|
|
|
|