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