1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxList, wxStringList classes
4 // Author: Julian Smart
8 // Copyright: (c) 1998 Julian Smart
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
16 #pragma interface "list.h"
20 #include "wx/object.h"
22 class WXDLLEXPORT wxList
;
25 #define wxKEY_INTEGER 1
26 #define wxKEY_STRING 2
27 class WXDLLEXPORT wxNode
: public wxObject
29 DECLARE_DYNAMIC_CLASS(wxNode
)
46 wxNode(wxList
*the_list
= (wxList
*) NULL
, wxNode
*last_one
= (wxNode
*) NULL
, wxNode
*next_one
= (wxNode
*) NULL
, wxObject
*object
= (wxObject
*) NULL
);
47 wxNode(wxList
*the_list
, wxNode
*last_one
, wxNode
*next_one
,
48 wxObject
*object
, long the_key
);
49 wxNode(wxList
*the_list
, wxNode
*last_one
, wxNode
*next_one
,
50 wxObject
*object
, const char *the_key
);
53 inline wxNode
*Next(void) const { return next
; }
54 inline wxNode
*Previous(void) const { return previous
; }
55 inline wxObject
*Data(void) const { return (wxObject
*)data
; }
56 inline void SetData(wxObject
*the_data
) { data
= the_data
; }
59 // type of compare function for list sort operation (as in 'qsort')
60 typedef int (*wxSortCompareFunction
)(const void *elem1
, const void *elem2
);
61 typedef int (*wxListIterateFunction
)(wxObject
*o
);
63 class WXDLLEXPORT wxList
: public wxObject
65 DECLARE_DYNAMIC_CLASS(wxList
)
72 unsigned int key_type
;
75 wxList(const unsigned int the_key_type
);
76 wxList(int N
, wxObject
*Objects
[]);
77 wxList(wxObject
*object
, ...);
81 inline int Number(void) const { return n
; }
82 inline int GetCount(void) const { return n
; }
84 // Append to end of list
85 wxNode
*Append(wxObject
*object
);
87 // Insert at front of list
88 wxNode
*Insert(wxObject
*object
);
90 // Insert before given node
91 wxNode
*Insert(wxNode
*position
, wxObject
*object
);
94 wxNode
*Append(long key
, wxObject
*object
);
95 wxNode
*Append(const char *key
, wxObject
*object
);
97 bool DeleteNode(wxNode
*node
);
98 bool DeleteObject(wxObject
*object
); // Finds object pointer and
99 // deletes node (and object if
100 // DeleteContents is on)
101 virtual void Clear(void); // Delete all nodes
103 inline wxNode
*First(void) const { return first_node
; }
104 inline wxNode
*Last(void) const { return last_node
; }
105 wxNode
*Nth(int i
) const; // nth node counting from 0
108 virtual wxNode
*Find(long key
) const;
109 virtual wxNode
*Find(const char *key
) const;
111 virtual wxNode
*Member(wxObject
*object
) const;
113 inline void DeleteContents(int destroy
) { destroy_data
= destroy
; }
114 // Instruct it to destroy user data
115 // when deleting nodes
116 // this function allows the sorting of arbitrary lists by giving
117 // a function to compare two list elements.
118 void Sort(const wxSortCompareFunction compfunc
);
120 wxObject
*FirstThat(wxListIterateFunction func
);
121 void ForEach(wxListIterateFunction func
);
122 wxObject
*LastThat(wxListIterateFunction func
);
125 // String list class. N.B. this always copies strings
126 // with Add and deletes them itself.
127 class WXDLLEXPORT wxStringList
: public wxList
129 DECLARE_DYNAMIC_CLASS(wxStringList
)
133 wxStringList(const wxStringList
& list
);
134 wxStringList(const char *first
...);
137 virtual wxNode
*Add(const char *s
);
138 virtual void Delete(const char *s
);
139 virtual char **ListToArray(bool new_copies
= FALSE
) const;
140 virtual void Sort(void);
141 virtual bool Member(const char *s
) const;
142 virtual void Clear(void);
143 void operator= (const wxStringList
& list
);
144 char* operator[] (int i
) const;