| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #pragma once |
| #ifndef HOLECOLLECTION_H_INCLUDED_ |
| #define HOLECOLLECTION_H_INCLUDED_ |
|
|
| #include <set> |
| #include <vector> |
|
|
| #include "Hole.h" |
|
|
| namespace MosesTraining |
| { |
|
|
| class HoleCollection |
| { |
| protected: |
| HoleList m_holes; |
| std::vector<Hole*> m_sortedSourceHoles; |
| std::vector<int> m_sourceHoleStartPoints; |
| std::vector<int> m_sourceHoleEndPoints; |
| std::vector<int> m_scope; |
| std::vector<int> m_sourcePhraseStart; |
| std::vector<int> m_sourcePhraseEnd; |
|
|
| public: |
| HoleCollection(int sourcePhraseStart, int sourcePhraseEnd) |
| : m_scope(1, 0) |
| , m_sourcePhraseStart(1, sourcePhraseStart) |
| , m_sourcePhraseEnd(1, sourcePhraseEnd) { |
| } |
|
|
| const HoleList &GetHoles() const { |
| return m_holes; |
| } |
|
|
| HoleList &GetHoles() { |
| return m_holes; |
| } |
|
|
| std::vector<Hole*> &GetSortedSourceHoles() { |
| return m_sortedSourceHoles; |
| } |
|
|
| void Add(int startT, int endT, int startS, int endS); |
|
|
| void RemoveLast(); |
|
|
| bool OverlapSource(const Hole &sourceHole) const { |
| HoleList::const_iterator iter; |
| for (iter = m_holes.begin(); iter != m_holes.end(); ++iter) { |
| const Hole &currHole = *iter; |
| if (currHole.Overlap(sourceHole, 0)) |
| return true; |
| } |
| return false; |
| } |
|
|
| bool ConsecSource(const Hole &sourceHole) const { |
| HoleList::const_iterator iter; |
| for (iter = m_holes.begin(); iter != m_holes.end(); ++iter) { |
| const Hole &currHole = *iter; |
| if (currHole.Neighbor(sourceHole, 0)) |
| return true; |
| } |
| return false; |
| } |
|
|
| |
| int Scope(const Hole &proposedHole) const; |
|
|
| void SortSourceHoles(); |
|
|
| }; |
|
|
| } |
|
|
| #endif |
|
|