}
reference operator*()
- { return wxUniCharRef::CreateForString(m_node, m_cur); }
+ { return wxUniCharRef::CreateForString(*str(), m_cur); }
iterator operator+(ptrdiff_t n) const
{ return iterator(str(), wxStringOperations::AddToIter(m_cur, n)); }
// create the reference
#if wxUSE_UNICODE_UTF8
- wxUniCharRef(wxStringIteratorNode& node, iterator pos) : m_node(node), m_pos(pos) {}
+ wxUniCharRef(wxString& str, iterator pos) : m_str(str), m_pos(pos) {}
#else
wxUniCharRef(iterator pos) : m_pos(pos) {}
#endif
// that must be used explicitly (this is more than using 'explicit'
// keyword on ctor!):
#if wxUSE_UNICODE_UTF8
- static wxUniCharRef CreateForString(wxStringIteratorNode& node, iterator pos)
- { return wxUniCharRef(node, pos); }
+ static wxUniCharRef CreateForString(wxString& str, iterator pos)
+ { return wxUniCharRef(str, pos); }
#else
static wxUniCharRef CreateForString(iterator pos)
{ return wxUniCharRef(pos); }
private:
// reference to the string and pointer to the character in string
#if wxUSE_UNICODE_UTF8
- wxStringIteratorNode& m_node;
+ wxString& m_str;
#endif
iterator m_pos;
};
// code -- in that case, we have to use wxStringImpl::replace() and
// this invalidates all iterators, so we have to update them too:
- wxString& str = *wx_const_cast(wxString*, m_node.m_str);
- wxStringImpl& strimpl = str.m_impl;
+ wxStringImpl& strimpl = m_str.m_impl;
int iterDiff = lenNew - lenOld;
size_t posIdx = m_pos - strimpl.begin();
size_t *indexes = indexes_a;
size_t iterNum = 0;
wxStringIteratorNode *it;
- for ( it = str.m_iterators.ptr; it; it = it->m_next, ++iterNum )
+ for ( it = m_str.m_iterators.ptr; it; it = it->m_next, ++iterNum )
{
wxASSERT( it->m_iter || it->m_citer );
// finally, set the iterators to valid values again (note that this
// updates m_pos as well):
size_t i;
- for ( i = 0, it = str.m_iterators.ptr; it; it = it->m_next, ++i )
+ for ( i = 0, it = m_str.m_iterators.ptr; it; it = it->m_next, ++i )
{
wxASSERT( i < iterNum );
wxASSERT( it->m_iter || it->m_citer );
CPPUNIT_TEST( CStrDataOperators );
CPPUNIT_TEST( CStrDataImplicitConversion );
CPPUNIT_TEST( ExplicitConversion );
+ CPPUNIT_TEST( IndexedAccess );
CPPUNIT_TEST_SUITE_END();
void String();
void CStrDataOperators();
void CStrDataImplicitConversion();
void ExplicitConversion();
+ void IndexedAccess();
DECLARE_NO_COPY_CLASS(StringTestCase)
};
CPPUNIT_ASSERT( CheckStrConstWChar(s, s.wc_str()) );
CPPUNIT_ASSERT( CheckStrWChar(s, s.wchar_str()) );
}
+
+void StringTestCase::IndexedAccess()
+{
+ wxString s("bar");
+ CPPUNIT_ASSERT_EQUAL( 'r', s[2] );
+
+ // this tests for a possible bug in UTF-8 based wxString implementation:
+ // the 3rd character of the underlying byte string is going to change, but
+ // the 3rd character of wxString should remain the same
+ s[0] = L'\u00e9';
+ CPPUNIT_ASSERT_EQUAL( 'r', s[2] );
+}
+