|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#include "HoleCollection.h" |
|
|
|
#include <algorithm> |
|
|
|
namespace MosesTraining |
|
{ |
|
|
|
void HoleCollection::SortSourceHoles() |
|
{ |
|
assert(m_sortedSourceHoles.size() == 0); |
|
|
|
|
|
HoleList::iterator iter; |
|
for (iter = m_holes.begin(); iter != m_holes.end(); ++iter) { |
|
Hole &currHole = *iter; |
|
m_sortedSourceHoles.push_back(&currHole); |
|
} |
|
|
|
|
|
std::sort(m_sortedSourceHoles.begin(), m_sortedSourceHoles.end(), HoleSourceOrderer()); |
|
} |
|
|
|
void HoleCollection::Add(int startT, int endT, int startS, int endS) |
|
{ |
|
Hole hole(startS, endS, startT, endT); |
|
m_scope.push_back(Scope(hole)); |
|
m_sourceHoleStartPoints.push_back(startS); |
|
m_sourceHoleEndPoints.push_back(endS); |
|
m_holes.push_back(hole); |
|
m_sortedSourceHoles.clear(); |
|
} |
|
|
|
void HoleCollection::RemoveLast() |
|
{ |
|
m_scope.pop_back(); |
|
m_sourceHoleStartPoints.pop_back(); |
|
m_sourceHoleEndPoints.pop_back(); |
|
m_holes.pop_back(); |
|
m_sortedSourceHoles.clear(); |
|
} |
|
|
|
int HoleCollection::Scope(const Hole &proposedHole) const |
|
{ |
|
const int holeStart = proposedHole.GetStart(0); |
|
const int holeEnd = proposedHole.GetEnd(0); |
|
int scope = m_scope.back(); |
|
if (holeStart == m_sourcePhraseStart.back() || |
|
find(m_sourceHoleEndPoints.begin(), m_sourceHoleEndPoints.end(), holeStart-1) != m_sourceHoleEndPoints.end()) { |
|
++scope; |
|
} |
|
if (holeEnd == m_sourcePhraseEnd.back() || |
|
find(m_sourceHoleStartPoints.begin(), m_sourceHoleStartPoints.end(), holeEnd-1) != m_sourceHoleStartPoints.end()) { |
|
++scope; |
|
} |
|
return scope; |
|
} |
|
|
|
} |
|
|