]>
Commit | Line | Data |
---|---|---|
23324ae1 FM |
1 | ///////////////////////////////////////////////////////////////////////////// |
2 | // Name: list.h | |
3 | // Purpose: documentation for wxList<T> class | |
4 | // Author: wxWidgets team | |
5 | // RCS-ID: $Id$ | |
6 | // Licence: wxWindows license | |
7 | ///////////////////////////////////////////////////////////////////////////// | |
8 | ||
9 | /** | |
10 | @class wxListT | |
11 | @wxheader{list.h} | |
7c913512 | 12 | |
23324ae1 FM |
13 | The wxListT class provides linked list functionality. It has been rewritten |
14 | to be type safe and to provide the full API of the STL std::list container and | |
15 | should be used like it. The exception is that wxListT actually stores | |
16 | pointers and therefore its iterators return pointers and not references | |
7c913512 | 17 | to the actual objets in the list (see example below) and @e value_type |
23324ae1 FM |
18 | is defined as @e T*. wxListT destroys an object after removing it only |
19 | if wxList::DeleteContents has been called. | |
7c913512 FM |
20 | |
21 | wxListT is not a real template and it requires that you declare and define | |
23324ae1 FM |
22 | each wxListT class in your program. This is done with @e WX_DECLARE_LIST |
23 | and @e WX_DEFINE_LIST macros (see example). We hope that we'll be able | |
24 | to provide a proper template class providing both the STL std::list | |
25 | and the old wxList API in the future. | |
7c913512 | 26 | |
23324ae1 FM |
27 | Please refer to the STL std::list documentation for further |
28 | information on how to use the class. Below we documented both | |
7c913512 | 29 | the supported STL and the legacy API that originated from the |
23324ae1 FM |
30 | old wxList class and which can still be used alternatively for |
31 | the the same class. | |
7c913512 FM |
32 | |
33 | Note that if you compile wxWidgets in STL mode (wxUSE_STL defined as 1) | |
34 | then wxListT will actually derive from std::list and just add a legacy | |
23324ae1 | 35 | compatibility layer for the old wxList class. |
7c913512 | 36 | |
23324ae1 FM |
37 | @library{wxbase} |
38 | @category{FIXME} | |
7c913512 | 39 | |
23324ae1 FM |
40 | @seealso |
41 | wxArrayT, wxVectorT | |
42 | */ | |
7c913512 | 43 | class wxList<T> |
23324ae1 FM |
44 | { |
45 | public: | |
46 | //@{ | |
47 | /** | |
48 | Constructors. | |
49 | */ | |
50 | wxListT(); | |
7c913512 | 51 | wxListT(size_t count, T * elements[]); |
23324ae1 FM |
52 | //@} |
53 | ||
54 | /** | |
55 | Destroys the list, but does not delete the objects stored in the list | |
56 | unless you called DeleteContents(@true ). | |
57 | */ | |
58 | ~wxListT(); | |
59 | ||
60 | /** | |
61 | Appends the pointer to @e object to the list. | |
62 | */ | |
63 | wxListT::compatibility_iterator Append(T * object); | |
64 | ||
65 | /** | |
66 | Clears the list, but does not delete the objects stored in the list | |
67 | unless you called DeleteContents(@true ). | |
68 | */ | |
69 | void Clear(); | |
70 | ||
71 | /** | |
72 | If @e destroy is @true, instructs the list to call @e delete | |
73 | on objects stored in the list whenever they are removed. | |
74 | The default is @false. | |
75 | */ | |
76 | void DeleteContents(bool destroy); | |
77 | ||
78 | /** | |
7c913512 | 79 | Deletes the given element refered to by @c iter from the list, |
23324ae1 FM |
80 | returning @true if successful. |
81 | */ | |
82 | bool DeleteNode(const compatibility_iterator& iter); | |
83 | ||
84 | /** | |
85 | Finds the given @e object and removes it from the list, returning | |
86 | @true if successful. The application must delete the actual object | |
87 | separately. | |
88 | */ | |
89 | bool DeleteObject(T * object); | |
90 | ||
91 | /** | |
92 | Removes element refered to be @c iter. | |
93 | */ | |
94 | void Erase(const compatibility_iterator& iter); | |
95 | ||
96 | /** | |
97 | Returns the iterator refering to @e object or @NULL if none found. | |
98 | */ | |
99 | wxListT::compatibility_iterator Find(T * object); | |
100 | ||
101 | /** | |
102 | Returns the number of elements in the list. | |
103 | */ | |
104 | size_t GetCount(); | |
105 | ||
106 | /** | |
107 | Returns the first iterator in the list (@NULL if the list is empty). | |
108 | */ | |
109 | wxListT::compatibility_iterator GetFirst(); | |
110 | ||
111 | /** | |
112 | Returns the last iterator in the list (@NULL if the list is empty). | |
113 | */ | |
114 | wxListT::compatibility_iterator GetLast(); | |
115 | ||
116 | /** | |
117 | Returns the index of @e obj within the list or @c wxNOT_FOUND if | |
118 | @e obj is not found in the list. | |
119 | */ | |
120 | int IndexOf(T* obj); | |
121 | ||
122 | //@{ | |
123 | /** | |
124 | Inserts the object before the object refered to be @e iter. | |
125 | */ | |
126 | wxListT::compatibility_iterator Insert(T * object); | |
7c913512 FM |
127 | wxListT::compatibility_iterator Insert(size_t position, |
128 | T * object); | |
129 | wxListT::compatibility_iterator Insert(compatibility_iterator iter, | |
130 | T * object); | |
23324ae1 FM |
131 | //@} |
132 | ||
133 | /** | |
134 | Returns @true if the list is empty, @false otherwise. | |
135 | */ | |
136 | bool IsEmpty(); | |
137 | ||
138 | /** | |
139 | Returns the iterator refering to the object at the given | |
140 | @c index in the list. | |
141 | */ | |
142 | wxListT::compatibility_iterator Item(size_t index); | |
143 | ||
144 | /** | |
145 | @b NB: This function is deprecated, use wxList::Find instead. | |
146 | */ | |
147 | wxListT::compatibility_iterator Member(T * object); | |
148 | ||
149 | /** | |
150 | @b NB: This function is deprecated, use @ref wxList::itemfunc Item instead. | |
151 | ||
152 | Returns the @e nth node in the list, indexing from zero (@NULL if the list is | |
153 | empty | |
154 | or the nth node could not be found). | |
155 | */ | |
156 | #define wxListT::compatibility_iterator Nth(int n) /* implementation is private */ | |
157 | ||
158 | /** | |
159 | @b NB: This function is deprecated, use wxList::GetCount instead. | |
160 | ||
161 | Returns the number of elements in the list. | |
162 | */ | |
163 | int Number(); | |
164 | ||
165 | /** | |
166 | Allows the sorting of arbitrary lists by giving a function to compare | |
167 | two list elements. We use the system @b qsort function for the actual | |
168 | sorting process. | |
169 | */ | |
170 | void Sort(wxSortCompareFunction compfunc); | |
171 | ||
172 | //@{ | |
173 | /** | |
174 | ) | |
175 | */ | |
176 | void assign(const_iterator first, const const_iterator& last); | |
7c913512 | 177 | void assign(size_type n); |
23324ae1 FM |
178 | //@} |
179 | ||
180 | //@{ | |
181 | /** | |
182 | Returns the last item of the list. | |
183 | */ | |
184 | reference back(); | |
7c913512 | 185 | const_reference back(); |
23324ae1 FM |
186 | //@} |
187 | ||
188 | //@{ | |
189 | /** | |
190 | Returns a (const) iterator pointing to the beginning of the list. | |
191 | */ | |
192 | iterator begin(); | |
7c913512 | 193 | const_iterator begin(); |
23324ae1 FM |
194 | //@} |
195 | ||
196 | /** | |
197 | Removes all items from the list. | |
198 | */ | |
199 | void clear(); | |
200 | ||
201 | /** | |
202 | Returns @e @true if the list is empty. | |
203 | */ | |
204 | bool empty(); | |
205 | ||
206 | //@{ | |
207 | /** | |
208 | Returns a (const) iterator pointing at the end of the list. | |
209 | */ | |
210 | iterator end(); | |
7c913512 | 211 | const_iterator end(); |
23324ae1 FM |
212 | //@} |
213 | ||
214 | //@{ | |
215 | /** | |
216 | Erases the items from @e first to @e last. | |
217 | */ | |
218 | iterator erase(const iterator& it); | |
7c913512 FM |
219 | iterator erase(const iterator& first, |
220 | const iterator& last); | |
23324ae1 FM |
221 | //@} |
222 | ||
223 | //@{ | |
224 | /** | |
225 | Returns the first item in the list. | |
226 | */ | |
227 | reference front(); | |
7c913512 | 228 | const_reference front(); |
23324ae1 FM |
229 | //@} |
230 | ||
231 | //@{ | |
232 | /** | |
233 | Inserts an item (or several) at the given position. | |
234 | */ | |
235 | iterator insert(const iterator& it); | |
7c913512 FM |
236 | void insert(const iterator& it, size_type n); |
237 | void insert(const iterator& it, const_iterator first, | |
238 | const const_iterator& last); | |
23324ae1 FM |
239 | //@} |
240 | ||
241 | /** | |
242 | Returns the largest possible size of the list. | |
243 | */ | |
244 | size_type max_size(); | |
245 | ||
246 | /** | |
247 | Removes the last item from the list. | |
248 | */ | |
249 | void pop_back(); | |
250 | ||
251 | /** | |
252 | Removes the first item from the list. | |
253 | */ | |
254 | void pop_front(); | |
255 | ||
256 | /** | |
257 | ) | |
258 | ||
259 | Adds an item to end of the list. | |
260 | */ | |
261 | void push_back(); | |
262 | ||
263 | /** | |
264 | ) | |
265 | ||
266 | Adds an item to the front of the list. | |
267 | */ | |
268 | void push_front(); | |
269 | ||
270 | //@{ | |
271 | /** | |
272 | Returns a (const) reverse iterator pointing to the beginning of the | |
273 | reversed list. | |
274 | */ | |
275 | reverse_iterator rbegin(); | |
7c913512 | 276 | const_reverse_iterator rbegin(); |
23324ae1 FM |
277 | //@} |
278 | ||
279 | /** | |
280 | Removes an item from the list. | |
281 | */ | |
282 | void remove(const_reference v); | |
283 | ||
284 | //@{ | |
285 | /** | |
286 | Returns a (const) reverse iterator pointing to the end of the | |
287 | reversed list. | |
288 | */ | |
289 | reverse_iterator rend(); | |
7c913512 | 290 | const_reverse_iterator rend(); |
23324ae1 FM |
291 | //@} |
292 | ||
293 | /** | |
294 | ) | |
295 | ||
296 | Resizes the list. If the the list is enlarges items with | |
297 | the value @e v are appended to the list. | |
298 | */ | |
299 | void resize(size_type n); | |
300 | ||
301 | /** | |
302 | Reverses the list. | |
303 | */ | |
304 | void reverse(); | |
305 | ||
306 | /** | |
307 | Returns the size of the list. | |
308 | */ | |
309 | size_type size(); | |
310 | }; | |
311 | ||
312 | ||
313 | /** | |
314 | @class wxNode | |
315 | @wxheader{list.h} | |
7c913512 FM |
316 | |
317 | wxNodeBase is the node structure used in linked lists (see | |
23324ae1 FM |
318 | wxList) and derived classes. You should never use wxNodeBase |
319 | class directly, however, because it works with untyped (@c void *) data and | |
320 | this is unsafe. Use wxNodeBase-derived classes which are automatically defined | |
321 | by WX_DECLARE_LIST and WX_DEFINE_LIST macros instead as described in | |
322 | wxList documentation (see example there). Also note that | |
323 | although there is a class called wxNode, it is defined for backwards | |
324 | compatibility only and usage of this class is strongly deprecated. | |
7c913512 | 325 | |
23324ae1 FM |
326 | In the documentation below, the type @c T should be thought of as a |
327 | "template'' parameter: this is the type of data stored in the linked list or, | |
328 | in other words, the first argument of WX_DECLARE_LIST macro. Also, wxNode is | |
329 | written as wxNodeT even though it isn't really a template class -- but it | |
330 | helps to think of it as if it were. | |
7c913512 | 331 | |
23324ae1 FM |
332 | @library{wxbase} |
333 | @category{FIXME} | |
7c913512 | 334 | |
23324ae1 FM |
335 | @seealso |
336 | wxList, wxHashTable | |
337 | */ | |
7c913512 | 338 | class wxNode |
23324ae1 FM |
339 | { |
340 | public: | |
341 | /** | |
342 | Retrieves the client data pointer associated with the node. | |
343 | */ | |
344 | T * GetData(); | |
345 | ||
346 | /** | |
347 | Retrieves the next node or @NULL if this node is the last one. | |
348 | */ | |
349 | wxNodeT * GetNext(); | |
350 | ||
351 | /** | |
352 | Retrieves the previous node or @NULL if this node is the first one in the list. | |
353 | */ | |
354 | wxNodeT * GetPrevious(); | |
355 | ||
356 | /** | |
357 | Returns the zero-based index of this node within the list. The return value | |
358 | will be @c wxNOT_FOUND if the node has not been added to a list yet. | |
359 | */ | |
360 | int IndexOf(); | |
361 | ||
362 | /** | |
363 | Sets the data associated with the node (usually the pointer will have been | |
364 | set when the node was created). | |
365 | */ | |
366 | void SetData(T * data); | |
367 | }; |