1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: wxList, wxStringList classes
4 // Author: Julian Smart
8 // Copyright: (c) 1998 Julian Smart
9 // Licence: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
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
= NULL
, wxNode
*last_one
= NULL
, wxNode
*next_one
= NULL
, wxObject
*object
= 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(const int N
, wxObject
*Objects
[]);
77 wxList(wxObject
*object
, ...);
79 #ifdef USE_STORABLE_CLASSES
80 wxList( istream
&stream
, char *data
);
81 virtual void StoreObject( ostream
&stream
);
86 inline int Number(void) const { return n
; }
88 // Append to end of list
89 wxNode
*Append(wxObject
*object
);
91 // Insert at front of list
92 wxNode
*Insert(wxObject
*object
);
94 // Insert before given node
95 wxNode
*Insert(wxNode
*position
, wxObject
*object
);
98 wxNode
*Append(const long key
, wxObject
*object
);
99 wxNode
*Append(const char *key
, wxObject
*object
);
101 bool DeleteNode(wxNode
*node
);
102 bool DeleteObject(wxObject
*object
); // Finds object pointer and
103 // deletes node (and object if
104 // DeleteContents is on)
105 void Clear(void); // Delete all nodes
107 inline wxNode
*First(void) const { return first_node
; }
108 inline wxNode
*Last(void) const { return last_node
; }
109 wxNode
*Nth(const int i
) const; // nth node counting from 0
112 wxNode
*Find(const long key
) const;
113 wxNode
*Find(const char *key
) const;
115 wxNode
*Member(wxObject
*object
) const;
117 inline void DeleteContents(const int destroy
) { destroy_data
= destroy
; }
118 // Instruct it to destroy user data
119 // when deleting nodes
120 // this function allows the sorting of arbitrary lists by giving
121 // a function to compare two list elements.
122 void Sort(const wxSortCompareFunction compfunc
);
124 wxObject
*FirstThat(wxListIterateFunction func
);
125 void ForEach(wxListIterateFunction func
);
126 wxObject
*LastThat(wxListIterateFunction func
);
129 // String list class. N.B. this always copies strings
130 // with Add and deletes them itself.
131 class WXDLLEXPORT wxStringList
: public wxList
133 DECLARE_DYNAMIC_CLASS(wxStringList
)
137 wxStringList(const char *first
...);
140 virtual wxNode
*Add(const char *s
);
141 virtual void Delete(const char *s
);
142 virtual char **ListToArray(const bool new_copies
= FALSE
) const;
143 virtual void Sort(void);
144 virtual bool Member(const char *s
) const;