X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/55d99c7a77789ff4904bf96eddca3715eb5af9b9..50b58dec17f90370a1ae76ad00aaff8c3c5066a9:/src/common/list.cpp diff --git a/src/common/list.cpp b/src/common/list.cpp index b9c9e06388..ed3c4a69d6 100644 --- a/src/common/list.cpp +++ b/src/common/list.cpp @@ -17,7 +17,7 @@ // headers // ----------------------------------------------------------------------------- -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "list.h" #endif @@ -35,9 +35,10 @@ #ifndef WX_PRECOMP #include "wx/defs.h" #include "wx/list.h" - #include "wx/utils.h" // for copystring() (beurk...) #endif +#if !wxUSE_STL + // ============================================================================= // implementation // ============================================================================= @@ -45,7 +46,6 @@ // ----------------------------------------------------------------------------- // wxListKey // ----------------------------------------------------------------------------- - wxListKey wxDefaultListKey; bool wxListKey::operator==(wxListKeyValue value) const @@ -147,7 +147,7 @@ void wxListBase::Init(wxKeyType keyType) m_nodeFirst = m_nodeLast = (wxNodeBase *) NULL; m_count = 0; - m_destroy = FALSE; + m_destroy = false; m_keyType = keyType; } @@ -345,7 +345,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 +408,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 +422,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() @@ -519,7 +519,11 @@ void wxListBase::Sort(const wxSortCompareFunction compfunc) } // sort the array - qsort((void *)objArray,num,sizeof(wxObject *),compfunc); + qsort((void *)objArray,num,sizeof(wxObject *), +#ifdef __WXWINCE__ + (int (__cdecl *)(const void *,const void *)) +#endif + compfunc); // put the sorted pointers back into the list objPtr = objArray; @@ -532,29 +536,43 @@ void wxListBase::Sort(const wxSortCompareFunction compfunc) delete[] objArray; } -// ============================================================================ -// compatibility section from now on -// ============================================================================ +void wxListBase::Reverse() +{ + wxNodeBase* node = m_nodeFirst; + wxNodeBase* tmp; -#ifdef wxLIST_COMPATIBILITY + while (node) + { + // swap prev and next pointers + tmp = node->m_next; + node->m_next = node->m_previous; + node->m_previous = tmp; -// ----------------------------------------------------------------------------- -// wxNodeBase deprecated methods -// ----------------------------------------------------------------------------- + // this is the node that was next before swapping + node = tmp; + } -wxNode *wxNodeBase::Next() const { return (wxNode *)GetNext(); } -wxNode *wxNodeBase::Previous() const { return (wxNode *)GetPrevious(); } -wxObject *wxNodeBase::Data() const { return (wxObject *)GetData(); } + // swap first and last node + tmp = m_nodeFirst; m_nodeFirst = m_nodeLast; m_nodeLast = tmp; +} -// ----------------------------------------------------------------------------- -// wxListBase deprecated methods -// ----------------------------------------------------------------------------- +void wxListBase::DeleteNodes(wxNodeBase* first, wxNodeBase* last) +{ + wxNodeBase* node = first; + + while (node != last) + { + wxNodeBase* next = node->GetNext(); + DeleteNode(node); + node = next; + } +} + +// ============================================================================ +// compatibility section from now on +// ============================================================================ -int wxListBase::Number() const { return GetCount(); } -wxNode *wxListBase::First() const { return (wxNode *)GetFirst(); } -wxNode *wxListBase::Last() const { return (wxNode *)GetLast(); } -wxNode *wxListBase::Nth(size_t n) const { return (wxNode *)Item(n); } -wxListBase::operator wxList&() const { return *(wxList*)this; } +#ifdef wxLIST_COMPATIBILITY // ----------------------------------------------------------------------------- // wxList (a.k.a. wxObjectList) @@ -572,9 +590,21 @@ void wxObjectListNode::DeleteData() delete (wxObject *)GetData(); } -// ----------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- // 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) @@ -594,12 +624,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) @@ -615,14 +645,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; @@ -647,7 +677,7 @@ wxStringList::wxStringList (const wxChar *first, ...) 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()]; @@ -656,7 +686,7 @@ wxChar **wxStringList::ListToArray(bool new_copies) const { wxChar *s = node->GetData(); if ( new_copies ) - string_array[i] = copystring(s); + string_array[i] = MYcopystring(s); else string_array[i] = s; node = node->GetNext(); @@ -672,13 +702,18 @@ 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__ +extern "C" int __cdecl +#else extern "C" int LINKAGEMODE +#endif + wx_comparestrings(const void *arg1, const void *arg2) { wxChar **s1 = (wxChar **) arg1; @@ -709,5 +744,16 @@ void wxStringList::Sort() delete [] array; } +wxNode *wxStringList::Add(const wxChar *s) +{ + return (wxNode *)wxStringListBase::Append(MYcopystring(s)); +} + +wxNode *wxStringList::Prepend(const wxChar *s) +{ + return (wxNode *)wxStringListBase::Insert(MYcopystring(s)); +} + #endif // wxLIST_COMPATIBILITY +#endif // !wxUSE_STL