The returned value was the same as the iterator that was passed in which could
even be invalid when appending.
Fix the wrong use of postfix decrement instead of prefix one and handle the
case of appending correctly.
Closes #11808.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@63943
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
iterator insert(const iterator& it, const_reference v) \
{ \
if ( it == end() ) \
iterator insert(const iterator& it, const_reference v) \
{ \
if ( it == end() ) \
Append((const_base_reference)v); \
Append((const_base_reference)v); \
+ /* \
+ note that this is the new end(), the old one was \
+ invalidated by the Append() call, and this is why we \
+ can't use the same code as in the normal case below \
+ */ \
+ iterator itins(end()); \
+ return --itins; \
+ } \
Insert(it.m_node, (const_base_reference)v); \
Insert(it.m_node, (const_base_reference)v); \
- iterator itprev(it); \
- return itprev--; \
+ iterator itins(it); \
+ return --itins; \
+ } \
} \
void insert(const iterator& it, size_type n, const_reference v) \
{ \
} \
void insert(const iterator& it, size_type n, const_reference v) \
{ \
list1.clear();
CPPUNIT_ASSERT( list1.empty() );
list1.clear();
CPPUNIT_ASSERT( list1.empty() );
- list1.insert(list1.end(), (int *)1);
- list1.insert(list1.end(), (int *)2);
+ it = list1.insert(list1.end(), (int *)1);
+ CPPUNIT_ASSERT_EQUAL( (int *)1, *it );
+ CPPUNIT_ASSERT( it == list1.begin() );
CPPUNIT_ASSERT_EQUAL( (int *)1, list1.front() );
CPPUNIT_ASSERT_EQUAL( (int *)1, list1.front() );
+
+ it = list1.insert(list1.end(), (int *)2);
+ CPPUNIT_ASSERT_EQUAL( (int *)2, *it );
+ CPPUNIT_ASSERT( ++it == list1.end() );
CPPUNIT_ASSERT_EQUAL( (int *)2, list1.back() );
CPPUNIT_ASSERT_EQUAL( (int *)2, list1.back() );
+ it = list1.begin();
+ wxListInt::iterator it2 = list1.insert(++it, (int *)3);
+ CPPUNIT_ASSERT_EQUAL( (int *)3, *it2 );
+
it = list1.begin();
it = list1.erase(++it, list1.end());
CPPUNIT_ASSERT_EQUAL( 1, list1.size() );
it = list1.begin();
it = list1.erase(++it, list1.end());
CPPUNIT_ASSERT_EQUAL( 1, list1.size() );