X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/7ec698211d5d82a009ac80fb354059e9af497508..2f36b4d22beeb7f4f0cedf922c0c26d037f54477:/src/common/list.cpp?ds=sidebyside diff --git a/src/common/list.cpp b/src/common/list.cpp index 398627b6c0..6eadb1533a 100644 --- a/src/common/list.cpp +++ b/src/common/list.cpp @@ -4,7 +4,6 @@ // Author: Julian Smart // Modified by: VZ at 16/11/98: WX_DECLARE_LIST() and typesafe lists added // Created: 04/01/98 -// RCS-ID: $Id$ // Copyright: (c) Julian Smart // Licence: wxWindows licence //////////////////////////////////////////////////////////////////////////////// @@ -29,11 +28,11 @@ #include #ifndef WX_PRECOMP - #include "wx/defs.h" #include "wx/list.h" + #include "wx/crt.h" #endif -#if !wxUSE_STL +#if !wxUSE_STD_CONTAINERS // ============================================================================= // implementation @@ -54,7 +53,7 @@ bool wxListKey::operator==(wxListKeyValue value) const // by not putting return here... case wxKEY_STRING: - return wxStrcmp(m_key.string, value.string) == 0; + return *m_key.string == *value.string; case wxKEY_INTEGER: return m_key.integer == value.integer; @@ -85,7 +84,7 @@ wxNodeBase::wxNodeBase(wxListBase *list, case wxKEY_STRING: // to be free()d later - m_key.string = wxStrdup(key.GetString()); + m_key.string = new wxString(key.GetString()); break; default: @@ -108,7 +107,7 @@ wxNodeBase::~wxNodeBase() { if ( m_list->m_keyType == wxKEY_STRING ) { - free(m_key.string); + delete m_key.string; } m_list->DetachNode(this); @@ -141,7 +140,7 @@ int wxNodeBase::IndexOf() const void wxListBase::Init(wxKeyType keyType) { m_nodeFirst = - m_nodeLast = (wxNodeBase *) NULL; + m_nodeLast = NULL; m_count = 0; m_destroy = false; m_keyType = keyType; @@ -165,28 +164,24 @@ void wxListBase::DoCopy(const wxListBase& list) m_destroy = list.m_destroy; m_keyType = list.m_keyType; m_nodeFirst = - m_nodeLast = (wxNodeBase *) NULL; + m_nodeLast = NULL; switch (m_keyType) { case wxKEY_INTEGER: { - long key; for ( wxNodeBase *node = list.GetFirst(); node; node = node->GetNext() ) { - key = node->GetKeyInteger(); - Append(key, node->GetData()); + Append(node->GetKeyInteger(), node->GetData()); } break; } case wxKEY_STRING: { - const wxChar *key; for ( wxNodeBase *node = list.GetFirst(); node; node = node->GetNext() ) { - key = node->GetKeyString(); - Append(key, node->GetData()); + Append(node->GetKeyString(), node->GetData()); } break; } @@ -201,7 +196,7 @@ void wxListBase::DoCopy(const wxListBase& list) } } - wxASSERT_MSG( m_count == list.m_count, _T("logic error in wxList::DoCopy") ); + wxASSERT_MSG( m_count == list.m_count, wxT("logic error in wxList::DoCopy") ); } wxListBase::~wxListBase() @@ -236,12 +231,12 @@ wxNodeBase *wxListBase::AppendCommon(wxNodeBase *node) wxNodeBase *wxListBase::Append(void *object) { // all objects in a keyed list should have a key - wxCHECK_MSG( m_keyType == wxKEY_NONE, (wxNodeBase *)NULL, + wxCHECK_MSG( m_keyType == wxKEY_NONE, NULL, wxT("need a key for the object to append") ); // we use wxDefaultListKey even though it is the default parameter value // because gcc under Mac OS X seems to miscompile this call otherwise - wxNodeBase *node = CreateNode(m_nodeLast, (wxNodeBase *)NULL, object, + wxNodeBase *node = CreateNode(m_nodeLast, NULL, object, wxDefaultListKey); return AppendCommon(node); @@ -251,31 +246,31 @@ wxNodeBase *wxListBase::Append(long key, void *object) { wxCHECK_MSG( (m_keyType == wxKEY_INTEGER) || (m_keyType == wxKEY_NONE && m_count == 0), - (wxNodeBase *)NULL, + NULL, wxT("can't append object with numeric key to this list") ); - wxNodeBase *node = CreateNode(m_nodeLast, (wxNodeBase *)NULL, object, key); + wxNodeBase *node = CreateNode(m_nodeLast, NULL, object, key); return AppendCommon(node); } -wxNodeBase *wxListBase::Append (const wxChar *key, void *object) +wxNodeBase *wxListBase::Append (const wxString& key, void *object) { wxCHECK_MSG( (m_keyType == wxKEY_STRING) || (m_keyType == wxKEY_NONE && m_count == 0), - (wxNodeBase *)NULL, + NULL, wxT("can't append object with string key to this list") ); - wxNodeBase *node = CreateNode(m_nodeLast, (wxNodeBase *)NULL, object, key); + wxNodeBase *node = CreateNode(m_nodeLast, NULL, object, key); return AppendCommon(node); } wxNodeBase *wxListBase::Insert(wxNodeBase *position, void *object) { // all objects in a keyed list should have a key - wxCHECK_MSG( m_keyType == wxKEY_NONE, (wxNodeBase *)NULL, + wxCHECK_MSG( m_keyType == wxKEY_NONE, NULL, wxT("need a key for the object to insert") ); - wxCHECK_MSG( !position || position->m_list == this, (wxNodeBase *)NULL, + wxCHECK_MSG( !position || position->m_list == this, NULL, wxT("can't insert before a node from another list") ); // previous and next node for the node being inserted @@ -288,7 +283,7 @@ wxNodeBase *wxListBase::Insert(wxNodeBase *position, void *object) else { // inserting in the beginning of the list - prev = (wxNodeBase *)NULL; + prev = NULL; next = m_nodeFirst; } @@ -321,7 +316,7 @@ wxNodeBase *wxListBase::Item(size_t n) const wxFAIL_MSG( wxT("invalid index in wxListBase::Item") ); - return (wxNodeBase *)NULL; + return NULL; } wxNodeBase *wxListBase::Find(const wxListKey& key) const @@ -338,7 +333,7 @@ wxNodeBase *wxListBase::Find(const wxListKey& key) const } // not found - return (wxNodeBase *)NULL; + return NULL; } wxNodeBase *wxListBase::Find(const void *object) const @@ -350,7 +345,7 @@ wxNodeBase *wxListBase::Find(const void *object) const } // not found - return (wxNodeBase *)NULL; + return NULL; } int wxListBase::IndexOf(void *object) const @@ -437,7 +432,7 @@ void wxListBase::Clear() } m_nodeFirst = - m_nodeLast = (wxNodeBase *)NULL; + m_nodeLast = NULL; m_count = 0; } @@ -458,7 +453,7 @@ void *wxListBase::FirstThat(wxListIterateFunction F) return current->GetData(); } - return (wxNodeBase *)NULL; + return NULL; } void *wxListBase::LastThat(wxListIterateFunction F) @@ -469,7 +464,7 @@ void *wxListBase::LastThat(wxListIterateFunction F) return current->GetData(); } - return (wxNodeBase *)NULL; + return NULL; } // (stefan.hammes@urz.uni-heidelberg.de) @@ -574,8 +569,6 @@ void wxListBase::DeleteNodes(wxNodeBase* first, wxNodeBase* last) // wxList (a.k.a. wxObjectList) // ----------------------------------------------------------------------------- -IMPLEMENT_DYNAMIC_CLASS(wxList, wxObject) - wxList::wxList( int key_type ) : wxObjectList( (wxKeyType)key_type ) { @@ -596,8 +589,6 @@ static inline wxChar* MYcopystring(const wxChar* s) return wxStrcpy(copy, s); } -IMPLEMENT_DYNAMIC_CLASS(wxStringList, wxObject) - // instead of WX_DEFINE_LIST(wxStringListBase) we define this function // ourselves void wxStringListNode::DeleteData() @@ -705,9 +696,13 @@ bool wxStringList::Member(const wxChar *s) const } #ifdef __WXWINCE__ -extern "C" int __cdecl +extern "C" +{ +static int __cdecl #else -extern "C" int LINKAGEMODE +extern "C" +{ +static int LINKAGEMODE #endif wx_comparestrings(const void *arg1, const void *arg2) @@ -718,6 +713,8 @@ wx_comparestrings(const void *arg1, const void *arg2) return wxStrcmp (*s1, *s2); } +} // end of extern "C" (required because of GCC Bug c++/33078 + // Sort a list of strings - deallocates old nodes, allocates new void wxStringList::Sort() { @@ -742,24 +739,28 @@ void wxStringList::Sort() wxNode *wxStringList::Add(const wxChar *s) { - return (wxNode *)wxStringListBase::Append(MYcopystring(s)); + return (wxNode *)(wxStringListBase::Node *) + wxStringListBase::Append(MYcopystring(s)); } wxNode *wxStringList::Prepend(const wxChar *s) { - return (wxNode *)wxStringListBase::Insert(MYcopystring(s)); + return (wxNode *)(wxStringListBase::Node *) + wxStringListBase::Insert(MYcopystring(s)); } #endif // wxLIST_COMPATIBILITY -#else // wxUSE_STL = 1 +#else // wxUSE_STD_CONTAINERS = 1 #include "wx/listimpl.cpp" - WX_DEFINE_LIST(wxObjectList); + WX_DEFINE_LIST(wxObjectList) -// with wxUSE_STL wxStringList contains wxString objects, not pointers -void wxStringListBase::DeleteFunction( const wxString WXUNUSED(X) ) +// with wxUSE_STD_CONTAINERS wxStringList contains wxString objects, not pointers +void _WX_LIST_HELPER_wxStringListBase::DeleteFunction( wxString WXUNUSED(X) ) { } -#endif // !wxUSE_STL +_WX_LIST_HELPER_wxStringListBase::BaseListType _WX_LIST_HELPER_wxStringListBase::EmptyList; + +#endif // !wxUSE_STD_CONTAINERS