1 /////////////////////////////////////////////////////////////////////////////
3 // Purpose: interface of wxList<T>
4 // Author: wxWidgets team
6 // Licence: wxWindows license
7 /////////////////////////////////////////////////////////////////////////////
12 The wxList<T> class provides linked list functionality.
14 This class has been rewritten to be type safe and to provide the full API of
15 the STL std::list container and should be used like it.
16 The exception is that wxList<T> actually stores pointers and therefore its
17 iterators return pointers and not references to the actual objets in the list
18 (see example below) and @e value_type is defined as @e T*.
19 wxList<T> destroys an object after removing it only if wxList::DeleteContents
22 wxList<T> is not a real template and it requires that you declare and define
23 each wxListT class in your program. This is done with @e WX_DECLARE_LIST
24 and @e WX_DEFINE_LIST macros (see example). We hope that we'll be able to
25 provide a proper template class providing both the STL std::list and the old
26 wxList API in the future.
28 Please refer to the STL std::list documentation for further information on how
29 to use the class. Below we documented both the supported STL and the legacy API
30 that originated from the old wxList class and which can still be used alternatively
31 for the the same class.
33 Note that if you compile wxWidgets in STL mode (wxUSE_STL defined as 1)
34 then wxList<T> will actually derive from std::list and just add a legacy
35 compatibility layer for the old wxList class.
38 // this part might be in a header or source (.cpp) file
44 // this macro declares and partly implements MyList class
45 WX_DECLARE_LIST(MyListElement, MyList);
49 // the only requirement for the rest is to be AFTER the full declaration of
50 // MyListElement (for WX_DECLARE_LIST forward declaration is enough), but
51 // usually it will be found in the source file and not in the header
53 #include <wx/listimpl.cpp>
54 WX_DEFINE_LIST(MyList);
58 MyListElement element;
59 list.Append(&element); // ok
60 list.Append(17); // error: incorrect type
62 // let's iterate over the list in STL syntax
63 MyList::iterator iter;
64 for (iter = list.begin(); iter != list.end(); ++iter)
66 MyListElement *current = *iter;
68 ...process the current element...
71 // the same with the legacy API from the old wxList class
72 MyList::compatibility_iterator node = list.GetFirst();
75 MyListElement *current = node->GetData();
77 ...process the current element...
79 node = node->GetNext();
83 For compatibility with previous versions wxList and wxStringList classes are
84 still defined, but their usage is deprecated and they will disappear in the
85 future versions completely.
86 The use of the latter is especially discouraged as it is not only unsafe but
87 is also much less efficient than wxArrayString class.
92 @see wxArray<T>, wxVector<T>
103 Constructor which initialized the list with an array of @a count elements.
105 wxList
<T
>(size_t count
, T
* elements
[]);
108 Destroys the list, but does not delete the objects stored in the list
109 unless you called DeleteContents(@true ).
114 Appends the pointer to @a object to the list.
116 wxList
<T
>::compatibility_iterator
Append(T
* object
);
120 Deletes the actual objects if DeleteContents( @true ) was called previously.
125 If @a destroy is @true, instructs the list to call @e delete
126 on objects stored in the list whenever they are removed.
127 The default is @false.
129 void DeleteContents(bool destroy
);
132 Deletes the given element refered to by @a iter from the list
133 if @a iter is a valid iterator. Returns @true if successful.
135 Deletes the actual object if DeleteContents( @true ) was called previously.
137 bool DeleteNode(const compatibility_iterator
& iter
);
140 Finds the given @a object and removes it from the list, returning
143 Deletes @a object if DeleteContents( @true ) was called previously.
145 bool DeleteObject(T
* object
);
148 Removes element refered to be @a iter.
150 Deletes the actualy object if DeleteContents( @true ) was called previously.
152 void Erase(const compatibility_iterator
& iter
);
155 Returns the iterator refering to @a object or @NULL if none found.
157 wxList
<T
>::compatibility_iterator
Find(T
* object
) const;
160 Returns the number of elements in the list.
162 size_t GetCount() const;
165 Returns the first iterator in the list (@NULL if the list is empty).
167 wxList
<T
>::compatibility_iterator
GetFirst() const;
170 Returns the last iterator in the list (@NULL if the list is empty).
172 wxList
<T
>::compatibility_iterator
GetLast() const;
175 Returns the index of @a obj within the list or @c wxNOT_FOUND if
176 @a obj is not found in the list.
178 int IndexOf(T
* obj
) const;
181 Inserts @a object at the beginning of the list.
183 wxList
<T
>::compatibility_iterator
Insert(T
* object
);
186 Inserts @a object at @a position.
188 wxList
<T
>::compatibility_iterator
Insert(size_t position
,
192 Inserts @a object before the object refered to be @a iter.
194 wxList
<T
>::compatibility_iterator
Insert(compatibility_iterator iter
,
198 Returns @true if the list is empty, @false otherwise.
200 bool IsEmpty() const;
203 Returns the iterator refering to the object at the given
204 @a index in the list.
206 wxList
<T
>::compatibility_iterator
Item(size_t index
) const;
209 @deprecated This function is deprecated, use Find() instead.
211 wxList
<T
>::compatibility_iterator
Member(T
* object
) const;
214 @deprecated This function is deprecated, use Item() instead.
216 wxList
<T
>::compatibility_iterator
Nth(int n
) const;
219 @deprecated This function is deprecated, use wxList::GetCount instead.
220 Returns the number of elements in the list.
225 Allows the sorting of arbitrary lists by giving a function to compare
226 two list elements. We use the system @b qsort function for the actual
229 void Sort(wxSortCompareFunction compfunc
);
232 Clears the list and item from @a first to @a last from another list to it.
234 void assign(const_iterator first
, const const_iterator
& last
);
237 Clears the list and adds @a n items with value @a v to it.
239 void assign(size_type n
, const_reference v
= value_type());
242 Returns the last item of the list.
247 Returns the last item of the list as a const reference.
249 const_reference
back() const;
252 Returns an iterator pointing to the beginning of the list.
257 Returns a const iterator pointing to the beginning of the list.
259 const_iterator
begin() const;
262 Removes all items from the list.
267 Returns @e @true if the list is empty.
272 Returns a const iterator pointing at the end of the list.
274 const_iterator
end() const;
277 Returns a iterator pointing at the end of the list.
279 iterator
end() const;
282 Erases the given item
284 iterator
erase(const iterator
& it
);
287 Erases the items from @e first to @e last.
289 iterator
erase(const iterator
& first
,
290 const iterator
& last
);
293 Returns the first item in the list.
295 reference
front() const;
298 Returns the first item in the list as a const reference.
300 const_reference
front() const;
303 Inserts an item at the head of the list
305 iterator
insert(const iterator
& it
);
308 Inserts an item at the given position
310 void insert(const iterator
& it
, size_type n
);
313 Inserts several items at the given position.
315 void insert(const iterator
& it
, const_iterator first
,
316 const const_iterator
& last
);
319 Returns the largest possible size of the list.
321 size_type
max_size() const;
324 Removes the last item from the list.
329 Removes the first item from the list.
334 Adds an item to end of the list.
336 void push_back(const_reference v
= value_type());
339 Adds an item to the front of the list.
341 void push_front(const_reference v
= value_type());
344 Returns a reverse iterator pointing to the beginning of the
347 reverse_iterator
rbegin();
350 Returns a const reverse iterator pointing to the beginning of the
353 const_reverse_iterator
rbegin() const;
356 Removes an item from the list.
358 void remove(const_reference v
);
361 Returns a reverse iterator pointing to the end of the reversed list.
363 reverse_iterator
rend();
366 Returns a const reverse iterator pointing to the end of the reversed list.
368 const_reverse_iterator
rend() const;
373 If the list is longer than @a n, then items are removed until the list
375 If the list is shorter than @a n items with the value @a v are appended
376 to the list until the list becomes long @a n.
378 void resize(size_type n
, value_type v
= value_type());
386 Returns the size of the list.
388 size_type
size() const;
396 wxNodeBase is the node structure used in linked lists (see wxList) and derived
397 classes. You should never use wxNodeBase class directly, however, because it
398 works with untyped (@c void *) data and this is unsafe.
399 Use wxNodeBase-derived classes which are automatically defined by WX_DECLARE_LIST
400 and WX_DEFINE_LIST macros instead as described in wxList documentation
403 Also note that although there is a class called wxNode, it is defined for backwards
404 compatibility only and usage of this class is strongly deprecated.
406 In the documentation below, the type @c T should be thought of as a
407 "template" parameter: this is the type of data stored in the linked list or,
408 in other words, the first argument of WX_DECLARE_LIST macro. Also, wxNode is
409 written as wxNodeT even though it isn't really a template class -- but it
410 helps to think of it as if it were.
415 @see wxList<T>, wxHashTable
421 Retrieves the client data pointer associated with the node.
426 Retrieves the next node or @NULL if this node is the last one.
428 wxNode
<T
>* GetNext() const;
431 Retrieves the previous node or @NULL if this node is the first one in the list.
433 wxNode
<T
>* GetPrevious();
436 Returns the zero-based index of this node within the list. The return value
437 will be @c wxNOT_FOUND if the node has not been added to a list yet.
442 Sets the data associated with the node (usually the pointer will have been
443 set when the node was created).
445 void SetData(T
* data
);