1087882c2SAxel Dörfler /* 2*29e8fa59SJohn Scipione * Copyright 2001-2009 Haiku, Inc. All rights reserved. 3087882c2SAxel Dörfler * Distributed under the terms of the MIT License. 4087882c2SAxel Dörfler */ 59bf6d51bSStefano Ceccherini #ifndef _BE_LIST_H 69bf6d51bSStefano Ceccherini #define _BE_LIST_H 752a38012Sejakowatz 8087882c2SAxel Dörfler 952a38012Sejakowatz #include <SupportDefs.h> 1052a38012Sejakowatz 119bf6d51bSStefano Ceccherini 12087882c2SAxel Dörfler class BList { 1352a38012Sejakowatz public: 1452a38012Sejakowatz BList(int32 count = 20); 15*29e8fa59SJohn Scipione BList(const BList& other); 1652a38012Sejakowatz virtual ~BList(); 1752a38012Sejakowatz 18b0850e9bSStephan Aßmus BList& operator=(const BList& other); 19b0850e9bSStephan Aßmus bool operator==(const BList& other) const; 20b0850e9bSStephan Aßmus bool operator!=(const BList& other) const; 219bf6d51bSStefano Ceccherini 22*29e8fa59SJohn Scipione // Adding and removing items 2352a38012Sejakowatz bool AddItem(void* item, int32 index); 2452a38012Sejakowatz bool AddItem(void* item); 259ecf9d1cSIngo Weinhold bool AddList(const BList* list, int32 index); 269ecf9d1cSIngo Weinhold bool AddList(const BList* list); 27b0850e9bSStephan Aßmus 2852a38012Sejakowatz bool RemoveItem(void* item); 2952a38012Sejakowatz void* RemoveItem(int32 index); 3052a38012Sejakowatz bool RemoveItems(int32 index, int32 count); 31*29e8fa59SJohn Scipione bool ReplaceItem(int32 index, void* item); 32b0850e9bSStephan Aßmus 339bf6d51bSStefano Ceccherini void MakeEmpty(); 3452a38012Sejakowatz 35087882c2SAxel Dörfler // Reorder items 36b0850e9bSStephan Aßmus void SortItems(int (*compareFunc)(const void*, 37b0850e9bSStephan Aßmus const void*)); 389bf6d51bSStefano Ceccherini bool SwapItems(int32 indexA, int32 indexB); 39*29e8fa59SJohn Scipione bool MoveItem(int32 from, int32 to); 409bf6d51bSStefano Ceccherini 41087882c2SAxel Dörfler // Retrieve items 429bf6d51bSStefano Ceccherini void* ItemAt(int32 index) const; 439bf6d51bSStefano Ceccherini void* FirstItem() const; 44b0850e9bSStephan Aßmus void* ItemAtFast(int32 index) const; 45087882c2SAxel Dörfler // does not check the array bounds! 469bf6d51bSStefano Ceccherini 479bf6d51bSStefano Ceccherini void* LastItem() const; 489bf6d51bSStefano Ceccherini void* Items() const; 499bf6d51bSStefano Ceccherini 50087882c2SAxel Dörfler // Query 519bf6d51bSStefano Ceccherini bool HasItem(void* item) const; 52b0850e9bSStephan Aßmus bool HasItem(const void* item) const; 539bf6d51bSStefano Ceccherini int32 IndexOf(void* item) const; 54b0850e9bSStephan Aßmus int32 IndexOf(const void* item) const; 559bf6d51bSStefano Ceccherini int32 CountItems() const; 569bf6d51bSStefano Ceccherini bool IsEmpty() const; 579bf6d51bSStefano Ceccherini 58087882c2SAxel Dörfler // Iteration 59087882c2SAxel Dörfler void DoForEach(bool (*func)(void* item)); 60b0850e9bSStephan Aßmus void DoForEach(bool (*func)(void* item, 61b0850e9bSStephan Aßmus void* arg2), void* arg2); 6252a38012Sejakowatz 6352a38012Sejakowatz private: 6452a38012Sejakowatz virtual void _ReservedList1(); 6552a38012Sejakowatz virtual void _ReservedList2(); 6652a38012Sejakowatz 670c8bdbafSRene Gollent bool _ResizeArray(int32 count); 68b0850e9bSStephan Aßmus 6952a38012Sejakowatz private: 7052a38012Sejakowatz void** fObjectList; 710c8bdbafSRene Gollent int32 fPhysicalSize; 7252a38012Sejakowatz int32 fItemCount; 7352a38012Sejakowatz int32 fBlockSize; 740c8bdbafSRene Gollent int32 fResizeThreshold; 75b0850e9bSStephan Aßmus 760c8bdbafSRene Gollent uint32 _reserved[1]; 7752a38012Sejakowatz }; 7852a38012Sejakowatz 79*29e8fa59SJohn Scipione 809bf6d51bSStefano Ceccherini #endif // _BE_LIST_H 81