| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| #pragma once |
|
|
| #include <vector> |
| #include "DotChart.h" |
|
|
| namespace OnDiskPt |
| { |
| class PhraseNode; |
| } |
|
|
| namespace Moses |
| { |
|
|
| |
| |
| class DottedRuleOnDisk : public DottedRule |
| { |
| public: |
| |
| explicit DottedRuleOnDisk(const OnDiskPt::PhraseNode &lastNode) |
| : DottedRule() |
| , m_lastNode(lastNode) |
| , m_done(false) {} |
|
|
| DottedRuleOnDisk(const OnDiskPt::PhraseNode &lastNode, |
| const ChartCellLabel &cellLabel, |
| const DottedRuleOnDisk &prev) |
| : DottedRule(cellLabel, prev) |
| , m_lastNode(lastNode) |
| , m_done(false) {} |
|
|
| const OnDiskPt::PhraseNode &GetLastNode() const { |
| return m_lastNode; |
| } |
|
|
| bool Done() const { |
| return m_done; |
| } |
| void Done(bool value) const { |
| m_done = value; |
| } |
|
|
| private: |
| const OnDiskPt::PhraseNode &m_lastNode; |
| mutable bool m_done; |
| }; |
|
|
| class DottedRuleCollOnDisk |
| { |
| protected: |
| typedef std::vector<const DottedRuleOnDisk*> CollType; |
| CollType m_coll; |
|
|
| public: |
| typedef CollType::iterator iterator; |
| typedef CollType::const_iterator const_iterator; |
|
|
| const_iterator begin() const { |
| return m_coll.begin(); |
| } |
| const_iterator end() const { |
| return m_coll.end(); |
| } |
| iterator begin() { |
| return m_coll.begin(); |
| } |
| iterator end() { |
| return m_coll.end(); |
| } |
|
|
| const DottedRuleOnDisk &Get(size_t ind) const { |
| return *m_coll[ind]; |
| } |
|
|
| void Add(const DottedRuleOnDisk *dottedRule) { |
| m_coll.push_back(dottedRule); |
| } |
| void Delete(size_t ind) { |
| |
| m_coll.erase(m_coll.begin() + ind); |
| } |
|
|
| size_t GetSize() const { |
| return m_coll.size(); |
| } |
|
|
| }; |
|
|
| class SavedNodeOnDisk |
| { |
| const DottedRuleOnDisk *m_dottedRule; |
|
|
| public: |
| SavedNodeOnDisk(const DottedRuleOnDisk *dottedRule) |
| :m_dottedRule(dottedRule) { |
| UTIL_THROW_IF2(m_dottedRule == NULL, "Dotted rule is null"); |
| } |
|
|
| ~SavedNodeOnDisk() { |
| delete m_dottedRule; |
| } |
|
|
| const DottedRuleOnDisk &GetDottedRule() const { |
| return *m_dottedRule; |
| } |
| }; |
|
|
| class DottedRuleStackOnDisk |
| { |
| |
| public: |
| typedef std::vector<SavedNodeOnDisk*> SavedNodeColl; |
|
|
| protected: |
| typedef std::vector<DottedRuleCollOnDisk*> CollType; |
| CollType m_coll; |
|
|
| SavedNodeColl m_savedNode; |
|
|
| public: |
| typedef CollType::iterator iterator; |
| typedef CollType::const_iterator const_iterator; |
|
|
| const_iterator begin() const { |
| return m_coll.begin(); |
| } |
| const_iterator end() const { |
| return m_coll.end(); |
| } |
| iterator begin() { |
| return m_coll.begin(); |
| } |
| iterator end() { |
| return m_coll.end(); |
| } |
|
|
| DottedRuleStackOnDisk(size_t size); |
| ~DottedRuleStackOnDisk(); |
|
|
| const DottedRuleCollOnDisk &Get(size_t pos) const { |
| return *m_coll[pos]; |
| } |
| DottedRuleCollOnDisk &Get(size_t pos) { |
| return *m_coll[pos]; |
| } |
|
|
| const DottedRuleCollOnDisk &back() const { |
| return *m_coll.back(); |
| } |
|
|
| void Add(size_t pos, const DottedRuleOnDisk *dottedRule) { |
| UTIL_THROW_IF2(dottedRule == NULL, "Dotted rule is null"); |
|
|
| m_coll[pos]->Add(dottedRule); |
| m_savedNode.push_back(new SavedNodeOnDisk(dottedRule)); |
| } |
|
|
| const SavedNodeColl &GetSavedNodeColl() const { |
| return m_savedNode; |
| } |
|
|
| void SortSavedNodes(); |
|
|
| }; |
|
|
| } |
|
|
|
|