Path: blob/master/examples/cppwin/TensorflowTTSCppInference/ext/ZCharScanner.cpp
1564 views
#include "ZCharScanner.h"1#include <stdexcept>2using namespace std;34int ZStringDelimiter::key_search(const GString& s, const GString& key)5{6int count = 0;7size_t pos = 0;8while ((pos = s.find(key, pos)) != GString::npos) {9++count;10++pos;11}12return count;13}14void ZStringDelimiter::UpdateTokens()15{16if (!m_vDelimiters.size() || m_sString == "")17return;1819m_vTokens.clear();202122vector<GString>::iterator dIt = m_vDelimiters.begin();23while (dIt != m_vDelimiters.end())24{25GString delimiter = *dIt;262728DelimStr(m_sString, delimiter, true);293031++dIt;32}33343536}373839void ZStringDelimiter::DelimStr(const GString & s, const GString & delimiter, const bool & removeEmptyEntries)40{41BarRange(0, s.length());42for (size_t start = 0, end; start < s.length(); start = end + delimiter.length())43{44size_t position = s.find(delimiter, start);45end = position != GString::npos ? position : s.length();4647GString token = s.substr(start, end - start);48if (!removeEmptyEntries || !token.empty())49{50if (token != s)51m_vTokens.push_back(token);5253}54Bar(position);55}5657// dadwwdawdaawdwadwd58}5960void ZStringDelimiter::BarRange(const int & min, const int & max)61{62#ifdef _AFX_ALL_WARNINGS63if (PgBar)64m_pBar->SetRange32(min, max);656667#endif68}6970void ZStringDelimiter::Bar(const int & pos)71{72#ifdef _AFX_ALL_WARNINGS73if (PgBar)74m_pBar->SetPos(pos);757677#endif78}7980ZStringDelimiter::ZStringDelimiter()81{82m_sString = "";83tokenIndex = 0;84PgBar = false;85}868788bool ZStringDelimiter::GetFirstToken(GString & in_out)89{90if (m_vTokens.size() >= 1) {91in_out = m_vTokens[0];92return true;93}94else {95return false;96}97}9899bool ZStringDelimiter::GetNextToken(GString & in_sOut)100{101if (tokenIndex > m_vTokens.size() - 1)102return false;103104in_sOut = m_vTokens[tokenIndex];105++tokenIndex;106107return true;108}109110GString ZStringDelimiter::operator[](const size_t & in_index)111{112if (in_index > m_vTokens.size())113throw std::out_of_range("ZStringDelimiter tried to access token higher than size");114115return m_vTokens[in_index];116117}118GString ZStringDelimiter::Reassemble(const GString& delim, const int& nelem)119{120GString Result = "";121TokenIterator RasIt = m_vTokens.begin();122int r = 0;123if (nelem == -1) {124while (RasIt != m_vTokens.end())125{126127if (r != 0)128Result.append(delim);129130Result.append(*RasIt);131132++r;133134135++RasIt;136}137}138else {139while (RasIt != m_vTokens.end() && r < nelem)140{141142if (r != 0)143Result.append(delim);144145Result.append(*RasIt);146147++r;148++RasIt;149}150}151152return Result;153154}155156GString ZStringDelimiter::Reassemble(const GString & delim, const std::vector<GString>& Strs,int nelem)157{158GString Result = "";159TokenIterator RasIt = Strs.begin();160int r = 0;161if (nelem == -1) {162while (RasIt != Strs.end())163{164165if (r != 0)166Result.append(delim);167168Result.append(*RasIt);169170++r;171172173++RasIt;174}175}176else {177while (RasIt != Strs.end() && r < nelem)178{179180if (r != 0)181Result.append(delim);182183Result.append(*RasIt);184185++r;186++RasIt;187}188}189190return Result;191}192193void ZStringDelimiter::AddDelimiter(const GString & in_Delim)194{195m_vDelimiters.push_back(in_Delim);196UpdateTokens();197198}199200ZStringDelimiter::~ZStringDelimiter()201{202}203204205