X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/14f355c2b5c71fc7c3d680aea366582d2ac60f7b..57bf907d8e45ced18486d74c04f41c06034b7e65:/src/common/list.cpp diff --git a/src/common/list.cpp b/src/common/list.cpp index 26ace46fb5..15535b3552 100644 --- a/src/common/list.cpp +++ b/src/common/list.cpp @@ -1,5 +1,5 @@ //////////////////////////////////////////////////////////////////////////////// -// Name: list.cpp +// Name: src/common/list.cpp // Purpose: wxList implementation // Author: Julian Smart // Modified by: VZ at 16/11/98: WX_DECLARE_LIST() and typesafe lists added @@ -17,10 +17,6 @@ // headers // ----------------------------------------------------------------------------- -#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) - #pragma implementation "list.h" -#endif - // For compilers that support precompilation, includes "wx.h". #include "wx/wxprec.h" @@ -33,8 +29,8 @@ #include #ifndef WX_PRECOMP - #include "wx/defs.h" #include "wx/list.h" + #include "wx/crt.h" #endif #if !wxUSE_STL @@ -58,7 +54,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; @@ -89,7 +85,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: @@ -112,7 +108,7 @@ wxNodeBase::~wxNodeBase() { if ( m_list->m_keyType == wxKEY_STRING ) { - free(m_key.string); + delete m_key.string; } m_list->DetachNode(this); @@ -147,7 +143,7 @@ void wxListBase::Init(wxKeyType keyType) m_nodeFirst = m_nodeLast = (wxNodeBase *) NULL; m_count = 0; - m_destroy = FALSE; + m_destroy = false; m_keyType = keyType; } @@ -262,7 +258,7 @@ wxNodeBase *wxListBase::Append(long key, void *object) 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), @@ -345,7 +341,7 @@ wxNodeBase *wxListBase::Find(const wxListKey& key) const return (wxNodeBase *)NULL; } -wxNodeBase *wxListBase::Find(void *object) const +wxNodeBase *wxListBase::Find(const void *object) const { for ( wxNodeBase *current = GetFirst(); current; current = current->GetNext() ) { @@ -408,11 +404,11 @@ wxNodeBase *wxListBase::DetachNode(wxNodeBase *node) bool wxListBase::DeleteNode(wxNodeBase *node) { if ( !DetachNode(node) ) - return FALSE; + return false; DoDeleteNode(node); - return TRUE; + return true; } bool wxListBase::DeleteObject(void *object) @@ -422,12 +418,12 @@ bool wxListBase::DeleteObject(void *object) if ( current->GetData() == object ) { DeleteNode(current); - return TRUE; + return true; } } // not found - return FALSE; + return false; } void wxListBase::Clear() @@ -578,8 +574,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 ) { @@ -594,20 +588,12 @@ void wxObjectListNode::DeleteData() // wxStringList // ---------------------------------------------------------------------------- -static inline wxChar* MYcopystring(const wxString& s) -{ - wxChar* copy = new wxChar[s.length() + 1]; - return wxStrcpy(copy, s.c_str()); -} - static inline wxChar* MYcopystring(const wxChar* s) { wxChar* copy = new wxChar[wxStrlen(s) + 1]; return wxStrcpy(copy, s); } -IMPLEMENT_DYNAMIC_CLASS(wxStringList, wxObject) - // instead of WX_DEFINE_LIST(wxStringListBase) we define this function // ourselves void wxStringListNode::DeleteData() @@ -624,12 +610,12 @@ bool wxStringList::Delete(const wxChar *s) if ( wxStrcmp(current->GetData(), s) == 0 ) { DeleteNode(current); - return TRUE; + return true; } } // not found - return FALSE; + return false; } void wxStringList::DoCopy(const wxStringList& other) @@ -645,14 +631,14 @@ void wxStringList::DoCopy(const wxStringList& other) wxStringList::wxStringList() { - DeleteContents(TRUE); + DeleteContents(true); } // Variable argument list, terminated by a zero // Makes new storage for the strings wxStringList::wxStringList (const wxChar *first, ...) { - DeleteContents(TRUE); + DeleteContents(true); if ( !first ) return; @@ -664,20 +650,26 @@ wxStringList::wxStringList (const wxChar *first, ...) { Add(s); + // icc gives this warning in its own va_arg() macro, argh +#ifdef __INTELC__ + #pragma warning(push) + #pragma warning(disable: 1684) +#endif + s = va_arg(ap, const wxChar *); - // if (s == NULL) -#ifdef __WXMSW__ - if ((int)(long) s == 0) -#else - if ((long) s == 0) + +#ifdef __INTELC__ + #pragma warning(pop) #endif + + if ( !s ) break; } va_end(ap); } -// Only makes new strings if arg is TRUE +// Only makes new strings if arg is true wxChar **wxStringList::ListToArray(bool new_copies) const { wxChar **string_array = new wxChar *[GetCount()]; @@ -702,10 +694,10 @@ bool wxStringList::Member(const wxChar *s) const { const wxChar *s1 = node->GetData(); if (s == s1 || wxStrcmp (s, s1) == 0) - return TRUE; + return true; } - return FALSE; + return false; } #ifdef __WXWINCE__ @@ -746,14 +738,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 + + #include "wx/listimpl.cpp" + WX_DEFINE_LIST(wxObjectList) + +// with wxUSE_STL wxStringList contains wxString objects, not pointers +void _WX_LIST_HELPER_wxStringListBase::DeleteFunction( wxString WXUNUSED(X) ) +{ +} + +wxStringListBase::BaseListType wxStringListBase::EmptyList; + #endif // !wxUSE_STL