NMTKD
/
translation
/tools
/mosesdecoder
/phrase-extract
/postprocess-egret-forests
/SplitPointFileParser.cpp
namespace MosesTraining | |
{ | |
namespace Syntax | |
{ | |
namespace PostprocessEgretForests | |
{ | |
SplitPointFileParser::SplitPointFileParser() | |
: m_input(0) | |
{ | |
} | |
SplitPointFileParser::SplitPointFileParser(std::istream &input) | |
: m_input(&input) | |
{ | |
++(*this); | |
} | |
SplitPointFileParser &SplitPointFileParser::operator++() | |
{ | |
if (!m_input) { | |
return *this; | |
} | |
m_entry.splitPoints.clear(); | |
if (!std::getline(*m_input, m_tmpLine)) { | |
m_input = 0; | |
return *this; | |
} | |
ParseLine(m_tmpLine, m_entry.splitPoints); | |
return *this; | |
} | |
void SplitPointFileParser::ParseLine(const std::string &line, | |
std::vector<SplitPoint> &splitPoints) | |
{ | |
std::string tmp; | |
const util::AnyCharacter delimiter(" \t"); | |
for (util::TokenIter<util::AnyCharacter, true> p(line, delimiter); p; ++p) { | |
splitPoints.resize(splitPoints.size()+1); | |
SplitPoint &splitPoint = splitPoints.back(); | |
std::size_t pos = p->find(','); | |
StringPiece sp = p->substr(0, pos); | |
sp.CopyToString(&tmp); | |
splitPoint.tokenPos = std::atoi(tmp.c_str()); | |
std::size_t begin = pos+1; | |
pos = p->find(',', begin); | |
sp = p->substr(begin, pos-begin); | |
sp.CopyToString(&tmp); | |
splitPoint.charPos = std::atoi(tmp.c_str()); | |
sp = p->substr(pos+1); | |
sp.CopyToString(&splitPoint.connector); | |
if (splitPoint.connector.size() > 1) { | |
throw Exception("multi-character connectors not currently supported"); | |
} | |
} | |
} | |
bool operator==(const SplitPointFileParser &lhs, | |
const SplitPointFileParser &rhs) | |
{ | |
// TODO Is this right? Compare values of istreams if non-zero? | |
return lhs.m_input == rhs.m_input; | |
} | |
bool operator!=(const SplitPointFileParser &lhs, | |
const SplitPointFileParser &rhs) | |
{ | |
return !(lhs == rhs); | |
} | |
} // namespace PostprocessEgretForests | |
} // namespace Syntax | |
} // namespace MosesTraining | |