bool operator==(const compatibility_iterator& i) const \
{ \
wxASSERT_MSG( m_list && i.m_list, \
- _T("comparing invalid iterators is illegal") ); \
+ wxT("comparing invalid iterators is illegal") ); \
return (m_list == i.m_list) && (m_iter == i.m_iter); \
} \
bool operator!=(const compatibility_iterator& i) const \
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 ); } \
wxListBase *m_list; // list we belong to
- DECLARE_NO_COPY_CLASS(wxNodeBase)
+ wxDECLARE_NO_COPY_CLASS(wxNodeBase);
};
// -----------------------------------------------------------------------------
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) \
{ \
for(size_type i = 0; i < n; ++i) \
- Insert(it.m_node, (const_base_reference)v); \
+ insert(it, v); \
} \
void insert(const iterator& it, \
const_iterator first, const const_iterator& last) \
{ \
for(; first != last; ++first) \
- Insert(it.m_node, (const_base_reference)*first); \
+ insert(it, *first); \
} \
iterator erase(const iterator& it) \
{ \
} \
iterator erase(const iterator& first, const iterator& last) \
{ \
- iterator next = last; ++next; \
+ iterator next = last; \
+ if ( next != end() ) \
+ ++next; \
DeleteNodes(first.m_node, last.m_node); \
return next; \
} \
{ splice(it, l, l.begin(), l.end() ); } \
void splice(const iterator& it, name& l, const iterator& first) \
{ \
- iterator tmp = first; ++tmp; \
- if(it == first || it == tmp) return; \
- insert(it, *first); \
- l.erase(first); \
+ if ( it != first ) \
+ { \
+ insert(it, *first); \
+ l.erase(first); \
+ } \
} \
void remove(const_reference v) \
{ DeleteObject((const_base_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
(list).clear(); \
}
+// append all element of one list to another one
+#define WX_APPEND_LIST(list, other) \
+ { \
+ wxList::compatibility_iterator node = other->GetFirst(); \
+ while ( node ) \
+ { \
+ (list)->push_back(node->GetData()); \
+ node = node->GetNext(); \
+ } \
+ }
+
#endif // _WX_LISTH__