forked from organicmaps/organicmaps
Added GetUniString() to strings::TokenizeIterator
This commit is contained in:
parent
6e4727243c
commit
32df24937c
2 changed files with 31 additions and 1 deletions
|
@ -121,3 +121,19 @@ UNIT_TEST(LastUniChar)
|
|||
TEST_EQUAL(strings::LastUniChar(" \xD0\x90"), 0x0410, ());
|
||||
|
||||
}
|
||||
|
||||
UNIT_TEST(GetUniString)
|
||||
{
|
||||
strings::SimpleTokenizer iter("Hello, \xD0\x9C\xD0\xB8\xD0\xBD\xD1\x81\xD0\xBA!", ", !");
|
||||
{
|
||||
strings::UniChar const s[] = { 'H', 'e', 'l', 'l', 'o' };
|
||||
strings::UniString us(&s[0], &s[0] + ARRAY_SIZE(s));
|
||||
TEST_EQUAL(iter.GetUniString(), us, ());
|
||||
}
|
||||
++iter;
|
||||
{
|
||||
strings::UniChar const s[] = { 0x041C, 0x0438, 0x043D, 0x0441, 0x043A };
|
||||
strings::UniString us(&s[0], &s[0] + ARRAY_SIZE(s));
|
||||
TEST_EQUAL(iter.GetUniString(), us, ());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,7 +18,8 @@ typedef buffer_vector<UniChar, 32> UniString;
|
|||
template <typename DelimFuncT>
|
||||
class TokenizeIterator
|
||||
{
|
||||
utf8::unchecked::iterator<string::const_iterator> m_beg, m_end, m_finish;
|
||||
typedef utf8::unchecked::iterator<string::const_iterator> Utf8IterT;
|
||||
Utf8IterT m_beg, m_end, m_finish;
|
||||
DelimFuncT m_delimFunc;
|
||||
|
||||
void move()
|
||||
|
@ -53,6 +54,7 @@ public:
|
|||
ASSERT( m_beg != m_finish, ("dereferencing of empty iterator") );
|
||||
return string(m_beg.base(), m_end.base());
|
||||
}
|
||||
|
||||
operator bool() const { return m_beg != m_finish; }
|
||||
|
||||
TokenizeIterator & operator++()
|
||||
|
@ -69,6 +71,18 @@ public:
|
|||
++copy;
|
||||
return !copy;
|
||||
}
|
||||
|
||||
UniString GetUniString() const
|
||||
{
|
||||
UniString result;
|
||||
Utf8IterT iter(m_beg);
|
||||
while (iter != m_end)
|
||||
{
|
||||
result.push_back(*iter);
|
||||
++iter;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
};
|
||||
|
||||
class SimpleDelimiter
|
||||
|
|
Loading…
Add table
Reference in a new issue