Fix wxStringTokenizer copy ctor and assignment operator.
Implement copying of wxStringTokenizer correctly: compiler-generated versions didn't work as the position of the tokenizer didn't point into the correct string after making the copy. Fix this by adjusting the position iterator to use the copy of the string. Closes #16339. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@78050 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -84,6 +84,21 @@ wxStringTokenizer::wxStringTokenizer(const wxString& str,
|
||||
SetString(str, delims, mode);
|
||||
}
|
||||
|
||||
wxStringTokenizer::wxStringTokenizer(const wxStringTokenizer& src)
|
||||
{
|
||||
DoCopyFrom(src);
|
||||
}
|
||||
|
||||
wxStringTokenizer& wxStringTokenizer::operator=(const wxStringTokenizer& src)
|
||||
{
|
||||
if (this != &src)
|
||||
{
|
||||
DoCopyFrom(src);
|
||||
}
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
void wxStringTokenizer::SetString(const wxString& str,
|
||||
const wxString& delims,
|
||||
wxStringTokenizerMode mode)
|
||||
@@ -136,6 +151,18 @@ void wxStringTokenizer::Reinit(const wxString& str)
|
||||
m_hasMoreTokens = MoreTokens_Unknown;
|
||||
}
|
||||
|
||||
void wxStringTokenizer::DoCopyFrom(const wxStringTokenizer& src)
|
||||
{
|
||||
m_string = src.m_string;
|
||||
m_stringEnd = m_string.end();
|
||||
m_pos = m_string.begin() + (src.m_pos - src.m_string.begin());
|
||||
m_delims = src.m_delims;
|
||||
m_delimsLen = src.m_delimsLen;
|
||||
m_mode = src.m_mode;
|
||||
m_lastDelim = src.m_lastDelim;
|
||||
m_hasMoreTokens = src.m_hasMoreTokens;
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// access to the tokens
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user