Added GetUniString() to strings::TokenizeIterator

This commit is contained in:
Alex Zolotarev 2011-05-23 20:09:39 +02:00 committed by Alex Zolotarev
parent 6e4727243c
commit 32df24937c
2 changed files with 31 additions and 1 deletions

View file

@ -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, ());
}
}

View file

@ -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