// headers
// -----------------------------------------------------------------------------
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "list.h"
#endif
#ifndef WX_PRECOMP
#include "wx/defs.h"
#include "wx/list.h"
- #include "wx/utils.h" // for copystring() (beurk...)
#endif
+#if !wxUSE_STL
+
// =============================================================================
// implementation
// =============================================================================
// -----------------------------------------------------------------------------
// wxListKey
// -----------------------------------------------------------------------------
-
wxListKey wxDefaultListKey;
bool wxListKey::operator==(wxListKeyValue value) 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() )
{
}
// 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;
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;
-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; }
+ while (node != last)
+ {
+ wxNodeBase* next = node->GetNext();
+ DeleteNode(node);
+ node = next;
+ }
+}
+
+// ============================================================================
+// compatibility section from now on
+// ============================================================================
+
+#ifdef wxLIST_COMPATIBILITY
// -----------------------------------------------------------------------------
// wxList (a.k.a. wxObjectList)
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)
{
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();
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;
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