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 ); } \
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); } \
\
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; \
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; \
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) \
{ \
// 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