iterator operator-(ptrdiff_t n) const
{ return iterator(str(), wxStringOperations::AddToIter(m_cur, -n)); }
+ // Normal iterators need to be comparable with the const_iterators so
+ // declare the comparison operators and implement them below after the
+ // full const_iterator declaration.
+ bool operator==(const const_iterator& i) const;
+ bool operator!=(const const_iterator& i) const;
+ bool operator<(const const_iterator& i) const;
+ bool operator>(const const_iterator& i) const;
+ bool operator<=(const const_iterator& i) const;
+ bool operator>=(const const_iterator& i) const;
+
private:
iterator(wxString *wxstr, underlying_iterator ptr)
: m_cur(ptr), m_node(wxstr, &m_cur) {}
const_iterator operator-(ptrdiff_t n) const
{ return const_iterator(str(), wxStringOperations::AddToIter(m_cur, -n)); }
+ // Notice that comparison operators taking non-const iterator are not
+ // needed here because of the implicit conversion from non-const iterator
+ // to const ones ensure that the versions for const_iterator declared
+ // inside WX_STR_ITERATOR_IMPL can be used.
+
private:
// for internal wxString use only:
const_iterator(const wxString *wxstr, underlying_iterator ptr)
inline bool operator!=(const wxString& s, char c) { return !s.IsSameAs(c); }
inline bool operator!=(const wxString& s, wchar_t c) { return !s.IsSameAs(c); }
+
+// wxString iterators comparisons
+inline bool wxString::iterator::operator==(const const_iterator& i) const
+ { return i == *this; }
+inline bool wxString::iterator::operator!=(const const_iterator& i) const
+ { return i != *this; }
+inline bool wxString::iterator::operator<(const const_iterator& i) const
+ { return i > *this; }
+inline bool wxString::iterator::operator>(const const_iterator& i) const
+ { return i < *this; }
+inline bool wxString::iterator::operator<=(const const_iterator& i) const
+ { return i >= *this; }
+inline bool wxString::iterator::operator>=(const const_iterator& i) const
+ { return i <= *this; }
+
// comparison with C string in Unicode build
#if wxUSE_UNICODE
CPPUNIT_TEST_SUITE( StdStringTestCase );
CPPUNIT_TEST( StdConstructors );
CPPUNIT_TEST( StdIterators );
+ CPPUNIT_TEST( StdIteratorsCmp );
CPPUNIT_TEST( StdAppend );
CPPUNIT_TEST( StdAssign );
CPPUNIT_TEST( StdCompare );
void StdConstructors();
void StdIterators();
+ void StdIteratorsCmp();
void StdAppend();
void StdAssign();
void StdCompare();
wxString::const_reverse_iterator i4;
}
+void StdStringTestCase::StdIteratorsCmp()
+{
+ wxString s("foobar");
+ wxString::iterator i = s.begin();
+ wxString::const_iterator ci = s.begin();
+
+ CPPUNIT_ASSERT( i == ci );
+ CPPUNIT_ASSERT( i >= ci );
+ CPPUNIT_ASSERT( i <= ci );
+ CPPUNIT_ASSERT( ci == i );
+ CPPUNIT_ASSERT( ci >= i );
+ CPPUNIT_ASSERT( ci <= i );
+
+ ci++;
+
+ CPPUNIT_ASSERT( i != ci );
+ CPPUNIT_ASSERT( i < ci );
+ CPPUNIT_ASSERT( !(i > ci) );
+
+ CPPUNIT_ASSERT( ci != i );
+ CPPUNIT_ASSERT( ci > i );
+ CPPUNIT_ASSERT( !(ci < i) );
+}
+
void StdStringTestCase::StdAppend()
{
wxString s1, s2, s3, s4, s5, s6, s7, s8;