X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/9a83f860948059b0273b5cc6d9e43fadad3ebfca..43ff861df48f0837dac98005dd397c5f127ca136:/include/wx/list.h diff --git a/include/wx/list.h b/include/wx/list.h index 88913253ec..8f0c86f276 100644 --- a/include/wx/list.h +++ b/include/wx/list.h @@ -258,7 +258,7 @@ inline const void *wxListCastElementToVoidPtr(const wxString& str) iterator i = const_cast< liT* >(this)->end(); \ return compatibility_iterator( this, !empty() ? --i : i ); \ } \ - compatibility_iterator Member( elT e ) const \ + bool Member( elT e ) const \ { return Find( e ); } \ compatibility_iterator Nth( int n ) const \ { return Item( n ); } \ @@ -767,6 +767,9 @@ private: virtual nodetype *Find(const wxListKey& key) const \ { return (nodetype *)wxListBase::Find(key); } \ \ + bool Member(const Tbase *object) const \ + { return Find(object) != NULL; } \ + \ int IndexOf(Tbase *object) const \ { return wxListBase::IndexOf(object); } \ \ @@ -816,9 +819,19 @@ private: reference_type operator*() const \ { return *(pointer_type)m_node->GetDataPtr(); } \ ptrop \ - itor& operator++() { m_node = m_node->GetNext(); return *this; }\ + itor& operator++() \ + { \ + wxASSERT_MSG( m_node, wxT("uninitialized iterator") ); \ + m_node = m_node->GetNext(); \ + return *this; \ + } \ const itor operator++(int) \ - { itor tmp = *this; m_node = m_node->GetNext(); return tmp; }\ + { \ + itor tmp = *this; \ + wxASSERT_MSG( m_node, wxT("uninitialized iterator") ); \ + m_node = m_node->GetNext(); \ + return tmp; \ + } \ itor& operator--() \ { \ m_node = m_node ? m_node->GetPrevious() : m_init; \ @@ -859,9 +872,19 @@ private: reference_type operator*() const \ { return *(pointer_type)m_node->GetDataPtr(); } \ ptrop \ - itor& operator++() { m_node = m_node->GetNext(); return *this; }\ + itor& operator++() \ + { \ + wxASSERT_MSG( m_node, wxT("uninitialized iterator") ); \ + m_node = m_node->GetNext(); \ + return *this; \ + } \ const itor operator++(int) \ - { itor tmp = *this; m_node = m_node->GetNext(); return tmp; }\ + { \ + itor tmp = *this; \ + wxASSERT_MSG( m_node, wxT("uninitialized iterator") ); \ + m_node = m_node->GetNext(); \ + return tmp; \ + } \ itor& operator--() \ { \ m_node = m_node ? m_node->GetPrevious() : m_init; \ @@ -1010,11 +1033,22 @@ private: iterator insert(const iterator& it, const_reference v) \ { \ if ( it == end() ) \ + { \ 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; \ + } \ else \ + { \ 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) \ { \ @@ -1179,12 +1213,7 @@ public: // compatibility methods void Sort(wxSortCompareFunction compfunc) { wxListBase::Sort(compfunc); } -#endif - -#if wxUSE_STL -#else - wxNode *Member(wxObject *object) const { return (wxNode *)Find(object); } -#endif +#endif // !wxUSE_STL }; #if !wxUSE_STL