vfs: check userland buffers before reading them.
[haiku.git] / docs / user / support / ObjectList.dox
blob871136f88f9e726c32578e1253593a25cb26e6cb
1 /*
2  * Copyright 2014 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  *
5  * Authors:
6  *              John Scipione, jscipione@gmail.com
7  *
8  * Corresponds to:
9  *              headers/os/support/ObjectList.h hrev40252
10  */
13 /*!
14         \file ObjectList.h
15         \ingroup support
16         \ingroup libbe
17         \brief Defines the BObjectList class.
21 /*!
22         \class BObjectList
23         \ingroup support
24         \ingroup libbe
25         \brief BObjectList is a wrapper around BList that adds type safety,
26                optional object ownership, search, and insert operations.
28         \since Haiku R1
32 /*!
33         \fn template<class T> BObjectList<T>::BObjectList(int32 itemsPerBlock,
34                 bool owning)
35         \brief Creates a new BObjectList.
37         \param itemsPerBlock The number of items per block to allocate.
38         \param owning Whether or not the BObjectList deletes its items when
39                it is emptied or deleted.
41         \since Haiku R1
45 /*!
46         \fn template<class T> BObjectList<T>::BObjectList(
47                 const BObjectList<T>& list)
48         \brief Creates a new BObjectList as a copy of another \a list.
50         \param list The \a list to copy from.
52         \since Haiku R1
56 /*!
57         \fn template<class T> BObjectList<T>::~BObjectList()
58         \brief Deletes the list.
60         If the list owns its items they are deleted too.
62         \since Haiku R1
66 /*!
67         \name Operators
71 //! @{
74 /*!
75         \fn template<class T> BObjectList<T>& BObjectList<T>::operator=(
76                 const BObjectList<T>& list)
77         \brief Creates a new BObjectList as a copy of another \a list by
78                overloading the = operator.
80         \param list The \a list to copy from.
82         \since Haiku R1
86 //! @}
89 /*!
90         \name Adding and Removing Items
94 //! @{
97 /*!
98         \fn template<class T> bool BObjectList<T>::AddItem(T* item)
99         \brief Append the \a item to the end of the list.
101         \param item The \a item to append.
103         \return Whether or not the \a item was appended.
104         \retval true The \a item was appended.
105         \retval false \a item was not appended, since resizing the BObjectList
106                 failed.
108         \since Haiku R1
113         \fn template<class T> bool BObjectList<T>::AddItem(T* item, int32 index)
114         \brief Add \a item at the specified \a index.
116         \param item The \a item to add.
117         \param index The place in the list to add the \a item.
119         \return Whether or not the item was added.
120         \retval true The item was added.
121         \retval false Item was not added. Either the index is negative or invalid,
122                 or resizing the BObjectList failed.
124         \since Haiku R1
129         \fn template<class T> bool BObjectList<T>::AddList(BObjectList<T>* list)
130         \brief Append a \a list of items to this list.
132         The original list is not altered.
134         \param list The \a list to be added.
136         \return Whether or not the \a list was added.
137         \retval true The \a list was added.
138         \retval false Failed to append the list, resizing failed.
140         \since Haiku R1
145         \fn template<class T> bool BObjectList<T>::AddList(BObjectList<T>* list,
146                 int32 index)
147         \brief Add a \a list of items to this list at the specified \a index.
149         The original list is not altered.
151         \param list The \a list to be added.
152         \param index The position in the current \a list where the new item(s) are
153                added.
155         \return Whether or not the \a list was added.
156         \retval true The \a list was added.
157         \retval false Failed to insert the \a list resizing failed.
159         \since Haiku R1
164         \fn template<class T> bool BObjectList<T>::RemoveItem(T* item,
165                 bool deleteIfOwning)
166         \brief Remove \a item from the list.
168         \param item The \a item to be removed.
169         \param deleteIfOwning Also delete the \a item if owned.
171         \return Whether or not the \a item was removed.
172         \retval true The \a item was found and removed.
173         \retval false The \a item was not in this list and thus not removed.
175         \since Haiku R1
180         \fn template<class T> T* BObjectList<T>::RemoveItemAt(int32 index)
181         \brief Remove the item at \a index from the list.
183         \param index The \a index of the item to be removed.
185         \return The pointer to the item that was removed, or \c NULL if the
186                 \a index was invalid.
188         \since Haiku R1
193         \fn template<class T> inline T* BObjectList<T>::ItemAt(int32 index) const
194         \brief Return a pointer to the item at the given \a index.
196         \param index The item to retrieve.
198         \return A pointer to the item in that position, or \c NULL if the
199                 \a index is out of bounds.
201         \since Haiku R1
206         \fn template<class T> bool BObjectList<T>::ReplaceItem(int32 index, T* item)
207         \brief Replace an item with another one.
209         \param index The offset in the list where to put the \a item.
210         \param item The new \a item to put in the list.
212         \return Whether or not the item was replaced.
213         \retval true The item was replaced.
214         \retval false The \a index was invalid.
216         \since Haiku R1
221         \fn template<class T> void BObjectList<T>::MakeEmpty(bool deleteIfOwning)
222         \brief Clear all the items from the list.
224         \param deleteIfOwning Also deletes items if owned.
226         \since Haiku R1
230 //! @}
234         \name Reordering Items
238 //! @{
242         \fn template<class T> T* BObjectList<T>::SwapWithItem(int32 index, T* item)
243         \brief Swap the \a item with the item at \a index.
245         \param index The offset in the list where to put the \a item.
246         \param item The new \a item to put in the list.
248         \return A pointer to the item in that position, or \c NULL if the
249                 \a index is out of bounds.
251         \since Haiku R1
256         \fn template<class T> bool BObjectList<T>::MoveItem(int32 from, int32 to)
257         \brief Move the item at \a from to the position of \a to.
259         \param from The index to move the item \a from.
260         \param to The index to move the item \a to.
262         \return Whether or not the items were moved.
263         \retval true The items were moved.
264         \retval false The \a from or \a to index was invalid.
266         \see BList::MoveItem()
268         \since Haiku R1
272 //! @}
276         \name Querying Items
280 //! @{
284         \fn template<class T> int32 BObjectList<T>::IndexOf(const T* item) const
285         \brief Return the index of \a item.
287         \return The index of the item, or -1 when the item is not in the list.
289         \since Haiku R1
294         \fn template<class T> T* BObjectList<T>::FirstItem() const
295         \brief Return a pointer to the first item in the list.
297         \return A pointer to the first item or \c NULL if the list is empty.
299         \see BObjectList<T>::LastItem() const
301         \since Haiku R1
306         \fn template<class T> T* BObjectList<T>::LastItem() const
307         \brief Return a pointer to the last item in the list.
309         \return A pointer to the last item or \c NULL if the list is empty.
311         \see BObjectList<T>::FirstItem() const
313         \since Haiku R1
318         \fn template<class T> bool BObjectList<T>::HasItem(const T* item) const
319         \brief Return whether or not \a item is in the list.
321         \return \c true if the \a item was in the list, \c false otherwise.
323         \since Haiku R1
328         \fn template<class T> bool BObjectList<T>::IsEmpty() const
329         \brief Return whether or not there are items in the list.
331         \return \c true if the list was empty, \c false otherwise.
333         \since Haiku R1
338         \fn template<class T> int32 BObjectList<T>::CountItems() const
339         \brief Returns the number of items in the list.
341         \return The number of items in the list as an int32.
343         \since Haiku R1
347 //! @}
351         \name Iterating Over Items
355 //! @{
359         \fn template<class T> T* BObjectList<T>::EachElement(EachFunction func,
360                 void* params)
361         \brief Perform an action on each item in the list.
363         \param func A function that takes a \c void* argument and returns a
364                boolean.
365         \param params parameters for \a func.
367         \return A pointer to the item.
369         \since Haiku R1
374         \fn template<class T> const T* BObjectList<T>::EachElement(
375                 ConstEachFunction func, void* params) const
376         \brief Perform an action on each item in the list.
378         \param func A function that takes a \c void* argument and returns a
379                boolean.
380         \param params parameters for \a func.
382         \return A pointer to the item.
384         \since Haiku R1
388 //! @}
392         \name Finding Items
396 //! @{
400         \fn template<class T> const T* BObjectList<T>::FindIf(
401                 const UnaryPredicate<T>& predicate) const
402         \brief Find items that match \a predicate.
404         \return A const pointer to T.
406         \since Haiku R1
411         \fn template<class T> T* BObjectList<T>::FindIf(
412                 const UnaryPredicate<T>& predicate)
413         \brief Find items that match \a predicate.
415         \return A pointer to T.
417         \since Haiku R1
422         \fn template<class T> T* BObjectList<T>::BinarySearch(const T& key,
423                 CompareFunction func) const
424         \brief Search for \a key in the list of items using the supplied comparison
425                function via a binary search algorithm.
427         \param key The \a key to search for.
428         \param func The comparison function to use.
430         \return A pointer to T.
432         \since Haiku R1
437         \fn template<class T> T* BObjectList<T>::BinarySearch(const T& key,
438                 CompareFunctionWithState func, void* state) const
439         \brief Search for \a key in the list of items using the supplied comparison
440                function via a binary search algorithm.
442         \param key The \a key to search for.
443         \param func The comparison function to use.
444         \param state Additional information used to search for the item.
446         \return A pointer to T.
448         \since Haiku R1
452 //! @}
456         \name Reordering Items
460 //! @{
464         \fn template<class T> void BObjectList<T>::SortItems(
465                 CompareFunction function)
466         \brief Sort the items with the use of a supplied comparison \a function.
468         \param function The \a function used to sort the items.
470         \since Haiku R1
475         \fn template<class T> void BObjectList<T>::SortItems(
476                 CompareFunctionWithState function, void* state)
477         \brief Sort the items with the use of a supplied comparison \a function and
478                addtional \a state.
480         \param function The \a function used to sort the items.
481         \param state Additional information used to sort the items.
483         \since Haiku R1
488         \fn template<class T> void BObjectList<T>::HSortItems(
489                 CompareFunction function)
490         \brief Sort the items with the use of a supplied comparison \a function.
492         \param function The \a function used to sort the items.
494         \since Haiku R1
499         \fn template<class T> void BObjectList<T>::HSortItems(
500                 CompareFunctionWithState function, void* state)
502         \param function The \a function used to sort the items.
503         \param state Additional information used to sort the items.
505         \since Haiku R1
509 //! @}