1*c4b9309aSJohn Scipione/* 2*c4b9309aSJohn Scipione * Copyright 2014 Haiku, Inc. All rights reserved. 3*c4b9309aSJohn Scipione * Distributed under the terms of the MIT License. 4*c4b9309aSJohn Scipione * 5*c4b9309aSJohn Scipione * Authors: 6*c4b9309aSJohn Scipione * John Scipione, jscipione@gmail.com 7*c4b9309aSJohn Scipione * 8*c4b9309aSJohn Scipione * Corresponds to: 9*c4b9309aSJohn Scipione * headers/os/support/ObjectList.h hrev40252 10*c4b9309aSJohn Scipione */ 11*c4b9309aSJohn Scipione 12*c4b9309aSJohn Scipione 13*c4b9309aSJohn Scipione/*! 14*c4b9309aSJohn Scipione \file ObjectList.h 15*c4b9309aSJohn Scipione \ingroup support 16*c4b9309aSJohn Scipione \ingroup libbe 17*c4b9309aSJohn Scipione \brief Defines the BObjectList class. 18*c4b9309aSJohn Scipione*/ 19*c4b9309aSJohn Scipione 20*c4b9309aSJohn Scipione 21*c4b9309aSJohn Scipione/*! 22*c4b9309aSJohn Scipione \class BObjectList 23*c4b9309aSJohn Scipione \ingroup support 24*c4b9309aSJohn Scipione \ingroup libbe 25*c4b9309aSJohn Scipione \brief BObjectList is a wrapper around BList that adds type safety, 26*c4b9309aSJohn Scipione optional object ownership, search, and insert operations. 27*c4b9309aSJohn Scipione 28*c4b9309aSJohn Scipione \since Haiku R1 29*c4b9309aSJohn Scipione*/ 30*c4b9309aSJohn Scipione 31*c4b9309aSJohn Scipione 32*c4b9309aSJohn Scipione/*! 33*c4b9309aSJohn Scipione \fn template<class T> BObjectList<T>::BObjectList(int32 itemsPerBlock, 34*c4b9309aSJohn Scipione bool owning) 35*c4b9309aSJohn Scipione \brief Creates a new BObjectList. 36*c4b9309aSJohn Scipione 37*c4b9309aSJohn Scipione \param itemsPerBlock The number of items per block to allocate. 38*c4b9309aSJohn Scipione \param owning Whether or not the BObjectList deletes its items when 39*c4b9309aSJohn Scipione it is emptied or deleted. 40*c4b9309aSJohn Scipione 41*c4b9309aSJohn Scipione \since Haiku R1 42*c4b9309aSJohn Scipione*/ 43*c4b9309aSJohn Scipione 44*c4b9309aSJohn Scipione 45*c4b9309aSJohn Scipione/*! 46*c4b9309aSJohn Scipione \fn template<class T> BObjectList<T>::BObjectList( 47*c4b9309aSJohn Scipione const BObjectList<T>& list) 48*c4b9309aSJohn Scipione \brief Creates a new BObjectList as a copy of another \a list. 49*c4b9309aSJohn Scipione 50*c4b9309aSJohn Scipione \param list The \a list to copy from. 51*c4b9309aSJohn Scipione 52*c4b9309aSJohn Scipione \since Haiku R1 53*c4b9309aSJohn Scipione*/ 54*c4b9309aSJohn Scipione 55*c4b9309aSJohn Scipione 56*c4b9309aSJohn Scipione/*! 57*c4b9309aSJohn Scipione \fn template<class T> BObjectList<T>::~BObjectList() 58*c4b9309aSJohn Scipione \brief Deletes the list. 59*c4b9309aSJohn Scipione 60*c4b9309aSJohn Scipione If the list owns its items they are deleted too. 61*c4b9309aSJohn Scipione 62*c4b9309aSJohn Scipione \since Haiku R1 63*c4b9309aSJohn Scipione*/ 64*c4b9309aSJohn Scipione 65*c4b9309aSJohn Scipione 66*c4b9309aSJohn Scipione/*! 67*c4b9309aSJohn Scipione \name Operators 68*c4b9309aSJohn Scipione*/ 69*c4b9309aSJohn Scipione 70*c4b9309aSJohn Scipione 71*c4b9309aSJohn Scipione//! @{ 72*c4b9309aSJohn Scipione 73*c4b9309aSJohn Scipione 74*c4b9309aSJohn Scipione/*! 75*c4b9309aSJohn Scipione \fn template<class T> BObjectList<T>& BObjectList<T>::operator=( 76*c4b9309aSJohn Scipione const BObjectList<T>& list) 77*c4b9309aSJohn Scipione \brief Creates a new BObjectList as a copy of another \a list by 78*c4b9309aSJohn Scipione overloading the = operator. 79*c4b9309aSJohn Scipione 80*c4b9309aSJohn Scipione \param list The \a list to copy from. 81*c4b9309aSJohn Scipione 82*c4b9309aSJohn Scipione \since Haiku R1 83*c4b9309aSJohn Scipione*/ 84*c4b9309aSJohn Scipione 85*c4b9309aSJohn Scipione 86*c4b9309aSJohn Scipione//! @} 87*c4b9309aSJohn Scipione 88*c4b9309aSJohn Scipione 89*c4b9309aSJohn Scipione/*! 90*c4b9309aSJohn Scipione \name Adding and Removing Items 91*c4b9309aSJohn Scipione*/ 92*c4b9309aSJohn Scipione 93*c4b9309aSJohn Scipione 94*c4b9309aSJohn Scipione//! @{ 95*c4b9309aSJohn Scipione 96*c4b9309aSJohn Scipione 97*c4b9309aSJohn Scipione/*! 98*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::AddItem(T* item) 99*c4b9309aSJohn Scipione \brief Append the \a item to the end of the list. 100*c4b9309aSJohn Scipione 101*c4b9309aSJohn Scipione \param item The \a item to append. 102*c4b9309aSJohn Scipione 103*c4b9309aSJohn Scipione \return Whether or not the \a item was appended. 104*c4b9309aSJohn Scipione \retval true The \a item was appended. 105*c4b9309aSJohn Scipione \retval false \a item was not appended, since resizing the BObjectList 106*c4b9309aSJohn Scipione failed. 107*c4b9309aSJohn Scipione 108*c4b9309aSJohn Scipione \since Haiku R1 109*c4b9309aSJohn Scipione*/ 110*c4b9309aSJohn Scipione 111*c4b9309aSJohn Scipione 112*c4b9309aSJohn Scipione/*! 113*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::AddItem(T* item, int32 index) 114*c4b9309aSJohn Scipione \brief Add \a item at the specified \a index. 115*c4b9309aSJohn Scipione 116*c4b9309aSJohn Scipione \param item The \a item to add. 117*c4b9309aSJohn Scipione \param index The place in the list to add the \a item. 118*c4b9309aSJohn Scipione 119*c4b9309aSJohn Scipione \return Whether or not the item was added. 120*c4b9309aSJohn Scipione \retval true The item was added. 121*c4b9309aSJohn Scipione \retval false Item was not added. Either the index is negative or invalid, 122*c4b9309aSJohn Scipione or resizing the BObjectList failed. 123*c4b9309aSJohn Scipione 124*c4b9309aSJohn Scipione \since Haiku R1 125*c4b9309aSJohn Scipione*/ 126*c4b9309aSJohn Scipione 127*c4b9309aSJohn Scipione 128*c4b9309aSJohn Scipione/*! 129*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::AddList(BObjectList<T>* list) 130*c4b9309aSJohn Scipione \brief Append a \a list of items to this list. 131*c4b9309aSJohn Scipione 132*c4b9309aSJohn Scipione The original list is not altered. 133*c4b9309aSJohn Scipione 134*c4b9309aSJohn Scipione \param list The \a list to be added. 135*c4b9309aSJohn Scipione 136*c4b9309aSJohn Scipione \return Whether or not the \a list was added. 137*c4b9309aSJohn Scipione \retval true The \a list was added. 138*c4b9309aSJohn Scipione \retval false Failed to append the list, resizing failed. 139*c4b9309aSJohn Scipione 140*c4b9309aSJohn Scipione \since Haiku R1 141*c4b9309aSJohn Scipione*/ 142*c4b9309aSJohn Scipione 143*c4b9309aSJohn Scipione 144*c4b9309aSJohn Scipione/*! 145*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::AddList(BObjectList<T>* list, 146*c4b9309aSJohn Scipione int32 index) 147*c4b9309aSJohn Scipione \brief Add a \a list of items to this list at the specified \a index. 148*c4b9309aSJohn Scipione 149*c4b9309aSJohn Scipione The original list is not altered. 150*c4b9309aSJohn Scipione 151*c4b9309aSJohn Scipione \param list The \a list to be added. 152*c4b9309aSJohn Scipione \param index The position in the current \a list where the new item(s) are 153*c4b9309aSJohn Scipione added. 154*c4b9309aSJohn Scipione 155*c4b9309aSJohn Scipione \return Whether or not the \a list was added. 156*c4b9309aSJohn Scipione \retval true The \a list was added. 157*c4b9309aSJohn Scipione \retval false Failed to insert the \a list resizing failed. 158*c4b9309aSJohn Scipione 159*c4b9309aSJohn Scipione \since Haiku R1 160*c4b9309aSJohn Scipione*/ 161*c4b9309aSJohn Scipione 162*c4b9309aSJohn Scipione 163*c4b9309aSJohn Scipione/*! 164*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::RemoveItem(T* item, 165*c4b9309aSJohn Scipione bool deleteIfOwning) 166*c4b9309aSJohn Scipione \brief Remove \a item from the list. 167*c4b9309aSJohn Scipione 168*c4b9309aSJohn Scipione \param item The \a item to be removed. 169*c4b9309aSJohn Scipione \param deleteIfOwning Also delete the \a item if owned. 170*c4b9309aSJohn Scipione 171*c4b9309aSJohn Scipione \return Whether or not the \a item was removed. 172*c4b9309aSJohn Scipione \retval true The \a item was found and removed. 173*c4b9309aSJohn Scipione \retval false The \a item was not in this list and thus not removed. 174*c4b9309aSJohn Scipione 175*c4b9309aSJohn Scipione \since Haiku R1 176*c4b9309aSJohn Scipione*/ 177*c4b9309aSJohn Scipione 178*c4b9309aSJohn Scipione 179*c4b9309aSJohn Scipione/*! 180*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::RemoveItemAt(int32 index) 181*c4b9309aSJohn Scipione \brief Remove the item at \a index from the list. 182*c4b9309aSJohn Scipione 183*c4b9309aSJohn Scipione \param index The \a index of the item to be removed. 184*c4b9309aSJohn Scipione 185*c4b9309aSJohn Scipione \return The pointer to the item that was removed, or \c NULL if the 186*c4b9309aSJohn Scipione \a index was invalid. 187*c4b9309aSJohn Scipione 188*c4b9309aSJohn Scipione \since Haiku R1 189*c4b9309aSJohn Scipione*/ 190*c4b9309aSJohn Scipione 191*c4b9309aSJohn Scipione 192*c4b9309aSJohn Scipione/*! 193*c4b9309aSJohn Scipione \fn template<class T> inline T* BObjectList<T>::ItemAt(int32 index) const 194*c4b9309aSJohn Scipione \brief Return a pointer to the item at the given \a index. 195*c4b9309aSJohn Scipione 196*c4b9309aSJohn Scipione \param index The item to retrieve. 197*c4b9309aSJohn Scipione 198*c4b9309aSJohn Scipione \return A pointer to the item in that position, or \c NULL if the 199*c4b9309aSJohn Scipione \a index is out of bounds. 200*c4b9309aSJohn Scipione 201*c4b9309aSJohn Scipione \since Haiku R1 202*c4b9309aSJohn Scipione*/ 203*c4b9309aSJohn Scipione 204*c4b9309aSJohn Scipione 205*c4b9309aSJohn Scipione/*! 206*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::ReplaceItem(int32 index, T* item) 207*c4b9309aSJohn Scipione \brief Replace an item with another one. 208*c4b9309aSJohn Scipione 209*c4b9309aSJohn Scipione \param index The offset in the list where to put the \a item. 210*c4b9309aSJohn Scipione \param item The new \a item to put in the list. 211*c4b9309aSJohn Scipione 212*c4b9309aSJohn Scipione \return Whether or not the item was replaced. 213*c4b9309aSJohn Scipione \retval true The item was replaced. 214*c4b9309aSJohn Scipione \retval false The \a index was invalid. 215*c4b9309aSJohn Scipione 216*c4b9309aSJohn Scipione \since Haiku R1 217*c4b9309aSJohn Scipione*/ 218*c4b9309aSJohn Scipione 219*c4b9309aSJohn Scipione 220*c4b9309aSJohn Scipione/*! 221*c4b9309aSJohn Scipione \fn template<class T> void BObjectList<T>::MakeEmpty(bool deleteIfOwning) 222*c4b9309aSJohn Scipione \brief Clear all the items from the list. 223*c4b9309aSJohn Scipione 224*c4b9309aSJohn Scipione \param deleteIfOwning Also deletes items if owned. 225*c4b9309aSJohn Scipione 226*c4b9309aSJohn Scipione \since Haiku R1 227*c4b9309aSJohn Scipione*/ 228*c4b9309aSJohn Scipione 229*c4b9309aSJohn Scipione 230*c4b9309aSJohn Scipione//! @} 231*c4b9309aSJohn Scipione 232*c4b9309aSJohn Scipione 233*c4b9309aSJohn Scipione/*! 234*c4b9309aSJohn Scipione \name Reordering Items 235*c4b9309aSJohn Scipione*/ 236*c4b9309aSJohn Scipione 237*c4b9309aSJohn Scipione 238*c4b9309aSJohn Scipione//! @{ 239*c4b9309aSJohn Scipione 240*c4b9309aSJohn Scipione 241*c4b9309aSJohn Scipione/*! 242*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::SwapWithItem(int32 index, T* item) 243*c4b9309aSJohn Scipione \brief Swap the \a item with the item at \a index. 244*c4b9309aSJohn Scipione 245*c4b9309aSJohn Scipione \param index The offset in the list where to put the \a item. 246*c4b9309aSJohn Scipione \param item The new \a item to put in the list. 247*c4b9309aSJohn Scipione 248*c4b9309aSJohn Scipione \return A pointer to the item in that position, or \c NULL if the 249*c4b9309aSJohn Scipione \a index is out of bounds. 250*c4b9309aSJohn Scipione 251*c4b9309aSJohn Scipione \since Haiku R1 252*c4b9309aSJohn Scipione*/ 253*c4b9309aSJohn Scipione 254*c4b9309aSJohn Scipione 255*c4b9309aSJohn Scipione/*! 256*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::MoveItem(int32 from, int32 to) 257*c4b9309aSJohn Scipione \brief Move the item at \a from to the position of \a to. 258*c4b9309aSJohn Scipione 259*c4b9309aSJohn Scipione \param from The index to move the item \a from. 260*c4b9309aSJohn Scipione \param to The index to move the item \a to. 261*c4b9309aSJohn Scipione 262*c4b9309aSJohn Scipione \return Whether or not the items were moved. 263*c4b9309aSJohn Scipione \retval true The items were moved. 264*c4b9309aSJohn Scipione \retval false The \a from or \a to index was invalid. 265*c4b9309aSJohn Scipione 266*c4b9309aSJohn Scipione \see BList::MoveItem() 267*c4b9309aSJohn Scipione 268*c4b9309aSJohn Scipione \since Haiku R1 269*c4b9309aSJohn Scipione*/ 270*c4b9309aSJohn Scipione 271*c4b9309aSJohn Scipione 272*c4b9309aSJohn Scipione//! @} 273*c4b9309aSJohn Scipione 274*c4b9309aSJohn Scipione 275*c4b9309aSJohn Scipione/*! 276*c4b9309aSJohn Scipione \name Querying Items 277*c4b9309aSJohn Scipione*/ 278*c4b9309aSJohn Scipione 279*c4b9309aSJohn Scipione 280*c4b9309aSJohn Scipione//! @{ 281*c4b9309aSJohn Scipione 282*c4b9309aSJohn Scipione 283*c4b9309aSJohn Scipione/*! 284*c4b9309aSJohn Scipione \fn template<class T> int32 BObjectList<T>::IndexOf(const T* item) const 285*c4b9309aSJohn Scipione \brief Return the index of \a item. 286*c4b9309aSJohn Scipione 287*c4b9309aSJohn Scipione \return The index of the item, or -1 when the item is not in the list. 288*c4b9309aSJohn Scipione 289*c4b9309aSJohn Scipione \since Haiku R1 290*c4b9309aSJohn Scipione*/ 291*c4b9309aSJohn Scipione 292*c4b9309aSJohn Scipione 293*c4b9309aSJohn Scipione/*! 294*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::FirstItem() const 295*c4b9309aSJohn Scipione \brief Return a pointer to the first item in the list. 296*c4b9309aSJohn Scipione 297*c4b9309aSJohn Scipione \return A pointer to the first item or \c NULL if the list is empty. 298*c4b9309aSJohn Scipione 299*c4b9309aSJohn Scipione \see BObjectList<T>::LastItem() const 300*c4b9309aSJohn Scipione 301*c4b9309aSJohn Scipione \since Haiku R1 302*c4b9309aSJohn Scipione*/ 303*c4b9309aSJohn Scipione 304*c4b9309aSJohn Scipione 305*c4b9309aSJohn Scipione/*! 306*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::LastItem() const 307*c4b9309aSJohn Scipione \brief Return a pointer to the last item in the list. 308*c4b9309aSJohn Scipione 309*c4b9309aSJohn Scipione \return A pointer to the last item or \c NULL if the list is empty. 310*c4b9309aSJohn Scipione 311*c4b9309aSJohn Scipione \see BObjectList<T>::FirstItem() const 312*c4b9309aSJohn Scipione 313*c4b9309aSJohn Scipione \since Haiku R1 314*c4b9309aSJohn Scipione*/ 315*c4b9309aSJohn Scipione 316*c4b9309aSJohn Scipione 317*c4b9309aSJohn Scipione/*! 318*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::HasItem(const T* item) const 319*c4b9309aSJohn Scipione \brief Return whether or not \a item is in the list. 320*c4b9309aSJohn Scipione 321*c4b9309aSJohn Scipione \return \c true if the \a item was in the list, \c false otherwise. 322*c4b9309aSJohn Scipione 323*c4b9309aSJohn Scipione \since Haiku R1 324*c4b9309aSJohn Scipione*/ 325*c4b9309aSJohn Scipione 326*c4b9309aSJohn Scipione 327*c4b9309aSJohn Scipione/*! 328*c4b9309aSJohn Scipione \fn template<class T> bool BObjectList<T>::IsEmpty() const 329*c4b9309aSJohn Scipione \brief Return whether or not there are items in the list. 330*c4b9309aSJohn Scipione 331*c4b9309aSJohn Scipione \return \c true if the list was empty, \c false otherwise. 332*c4b9309aSJohn Scipione 333*c4b9309aSJohn Scipione \since Haiku R1 334*c4b9309aSJohn Scipione*/ 335*c4b9309aSJohn Scipione 336*c4b9309aSJohn Scipione 337*c4b9309aSJohn Scipione/*! 338*c4b9309aSJohn Scipione \fn template<class T> int32 BObjectList<T>::CountItems() const 339*c4b9309aSJohn Scipione \brief Returns the number of items in the list. 340*c4b9309aSJohn Scipione 341*c4b9309aSJohn Scipione \return The number of items in the list as an int32. 342*c4b9309aSJohn Scipione 343*c4b9309aSJohn Scipione \since Haiku R1 344*c4b9309aSJohn Scipione*/ 345*c4b9309aSJohn Scipione 346*c4b9309aSJohn Scipione 347*c4b9309aSJohn Scipione//! @} 348*c4b9309aSJohn Scipione 349*c4b9309aSJohn Scipione 350*c4b9309aSJohn Scipione/*! 351*c4b9309aSJohn Scipione \name Iterating Over Items 352*c4b9309aSJohn Scipione*/ 353*c4b9309aSJohn Scipione 354*c4b9309aSJohn Scipione 355*c4b9309aSJohn Scipione//! @{ 356*c4b9309aSJohn Scipione 357*c4b9309aSJohn Scipione 358*c4b9309aSJohn Scipione/*! 359*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::EachElement(EachFunction func, 360*c4b9309aSJohn Scipione void* params) 361*c4b9309aSJohn Scipione \brief Perform an action on each item in the list. 362*c4b9309aSJohn Scipione 363*c4b9309aSJohn Scipione \param func A function that takes a \c void* argument and returns a 364*c4b9309aSJohn Scipione boolean. 365*c4b9309aSJohn Scipione \param params parameters for \a func. 366*c4b9309aSJohn Scipione 367*c4b9309aSJohn Scipione \return A pointer to the item. 368*c4b9309aSJohn Scipione 369*c4b9309aSJohn Scipione \since Haiku R1 370*c4b9309aSJohn Scipione*/ 371*c4b9309aSJohn Scipione 372*c4b9309aSJohn Scipione 373*c4b9309aSJohn Scipione/*! 374*c4b9309aSJohn Scipione \fn template<class T> const T* BObjectList<T>::EachElement( 375*c4b9309aSJohn Scipione ConstEachFunction func, void* params) const 376*c4b9309aSJohn Scipione \brief Perform an action on each item in the list. 377*c4b9309aSJohn Scipione 378*c4b9309aSJohn Scipione \param func A function that takes a \c void* argument and returns a 379*c4b9309aSJohn Scipione boolean. 380*c4b9309aSJohn Scipione \param params parameters for \a func. 381*c4b9309aSJohn Scipione 382*c4b9309aSJohn Scipione \return A pointer to the item. 383*c4b9309aSJohn Scipione 384*c4b9309aSJohn Scipione \since Haiku R1 385*c4b9309aSJohn Scipione*/ 386*c4b9309aSJohn Scipione 387*c4b9309aSJohn Scipione 388*c4b9309aSJohn Scipione//! @} 389*c4b9309aSJohn Scipione 390*c4b9309aSJohn Scipione 391*c4b9309aSJohn Scipione/*! 392*c4b9309aSJohn Scipione \name Finding Items 393*c4b9309aSJohn Scipione*/ 394*c4b9309aSJohn Scipione 395*c4b9309aSJohn Scipione 396*c4b9309aSJohn Scipione//! @{ 397*c4b9309aSJohn Scipione 398*c4b9309aSJohn Scipione 399*c4b9309aSJohn Scipione/*! 400*c4b9309aSJohn Scipione \fn template<class T> const T* BObjectList<T>::FindIf( 401*c4b9309aSJohn Scipione const UnaryPredicate<T>& predicate) const 402*c4b9309aSJohn Scipione \brief Find items that match \a predicate. 403*c4b9309aSJohn Scipione 404*c4b9309aSJohn Scipione \return A const pointer to T. 405*c4b9309aSJohn Scipione 406*c4b9309aSJohn Scipione \since Haiku R1 407*c4b9309aSJohn Scipione*/ 408*c4b9309aSJohn Scipione 409*c4b9309aSJohn Scipione 410*c4b9309aSJohn Scipione/*! 411*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::FindIf( 412*c4b9309aSJohn Scipione const UnaryPredicate<T>& predicate) 413*c4b9309aSJohn Scipione \brief Find items that match \a predicate. 414*c4b9309aSJohn Scipione 415*c4b9309aSJohn Scipione \return A pointer to T. 416*c4b9309aSJohn Scipione 417*c4b9309aSJohn Scipione \since Haiku R1 418*c4b9309aSJohn Scipione*/ 419*c4b9309aSJohn Scipione 420*c4b9309aSJohn Scipione 421*c4b9309aSJohn Scipione/*! 422*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::BinarySearch(const T& key, 423*c4b9309aSJohn Scipione CompareFunction func) const 424*c4b9309aSJohn Scipione \brief Search for \a key in the list of items using the supplied comparison 425*c4b9309aSJohn Scipione function via a binary search algorithm. 426*c4b9309aSJohn Scipione 427*c4b9309aSJohn Scipione \param key The \a key to search for. 428*c4b9309aSJohn Scipione \param func The comparison function to use. 429*c4b9309aSJohn Scipione 430*c4b9309aSJohn Scipione \return A pointer to T. 431*c4b9309aSJohn Scipione 432*c4b9309aSJohn Scipione \since Haiku R1 433*c4b9309aSJohn Scipione*/ 434*c4b9309aSJohn Scipione 435*c4b9309aSJohn Scipione 436*c4b9309aSJohn Scipione/*! 437*c4b9309aSJohn Scipione \fn template<class T> T* BObjectList<T>::BinarySearch(const T& key, 438*c4b9309aSJohn Scipione CompareFunctionWithState func, void* state) const 439*c4b9309aSJohn Scipione \brief Search for \a key in the list of items using the supplied comparison 440*c4b9309aSJohn Scipione function via a binary search algorithm. 441*c4b9309aSJohn Scipione 442*c4b9309aSJohn Scipione \param key The \a key to search for. 443*c4b9309aSJohn Scipione \param func The comparison function to use. 444*c4b9309aSJohn Scipione \param state Additional information used to search for the item. 445*c4b9309aSJohn Scipione 446*c4b9309aSJohn Scipione \return A pointer to T. 447*c4b9309aSJohn Scipione 448*c4b9309aSJohn Scipione \since Haiku R1 449*c4b9309aSJohn Scipione*/ 450*c4b9309aSJohn Scipione 451*c4b9309aSJohn Scipione 452*c4b9309aSJohn Scipione//! @} 453*c4b9309aSJohn Scipione 454*c4b9309aSJohn Scipione 455*c4b9309aSJohn Scipione/*! 456*c4b9309aSJohn Scipione \name Reordering Items 457*c4b9309aSJohn Scipione*/ 458*c4b9309aSJohn Scipione 459*c4b9309aSJohn Scipione 460*c4b9309aSJohn Scipione//! @{ 461*c4b9309aSJohn Scipione 462*c4b9309aSJohn Scipione 463*c4b9309aSJohn Scipione/*! 464*c4b9309aSJohn Scipione \fn template<class T> void BObjectList<T>::SortItems( 465*c4b9309aSJohn Scipione CompareFunction function) 466*c4b9309aSJohn Scipione \brief Sort the items with the use of a supplied comparison \a function. 467*c4b9309aSJohn Scipione 468*c4b9309aSJohn Scipione \param function The \a function used to sort the items. 469*c4b9309aSJohn Scipione 470*c4b9309aSJohn Scipione \since Haiku R1 471*c4b9309aSJohn Scipione*/ 472*c4b9309aSJohn Scipione 473*c4b9309aSJohn Scipione 474*c4b9309aSJohn Scipione/*! 475*c4b9309aSJohn Scipione \fn template<class T> void BObjectList<T>::SortItems( 476*c4b9309aSJohn Scipione CompareFunctionWithState function, void* state) 477*c4b9309aSJohn Scipione \brief Sort the items with the use of a supplied comparison \a function and 478*c4b9309aSJohn Scipione addtional \a state. 479*c4b9309aSJohn Scipione 480*c4b9309aSJohn Scipione \param function The \a function used to sort the items. 481*c4b9309aSJohn Scipione \param state Additional information used to sort the items. 482*c4b9309aSJohn Scipione 483*c4b9309aSJohn Scipione \since Haiku R1 484*c4b9309aSJohn Scipione*/ 485*c4b9309aSJohn Scipione 486*c4b9309aSJohn Scipione 487*c4b9309aSJohn Scipione/*! 488*c4b9309aSJohn Scipione \fn template<class T> void BObjectList<T>::HSortItems( 489*c4b9309aSJohn Scipione CompareFunction function) 490*c4b9309aSJohn Scipione \brief Sort the items with the use of a supplied comparison \a function. 491*c4b9309aSJohn Scipione 492*c4b9309aSJohn Scipione \param function The \a function used to sort the items. 493*c4b9309aSJohn Scipione 494*c4b9309aSJohn Scipione \since Haiku R1 495*c4b9309aSJohn Scipione*/ 496*c4b9309aSJohn Scipione 497*c4b9309aSJohn Scipione 498*c4b9309aSJohn Scipione/* 499*c4b9309aSJohn Scipione \fn template<class T> void BObjectList<T>::HSortItems( 500*c4b9309aSJohn Scipione CompareFunctionWithState function, void* state) 501*c4b9309aSJohn Scipione 502*c4b9309aSJohn Scipione \param function The \a function used to sort the items. 503*c4b9309aSJohn Scipione \param state Additional information used to sort the items. 504*c4b9309aSJohn Scipione 505*c4b9309aSJohn Scipione \since Haiku R1 506*c4b9309aSJohn Scipione*/ 507*c4b9309aSJohn Scipione 508*c4b9309aSJohn Scipione 509*c4b9309aSJohn Scipione//! @} 510