xref: /haiku/headers/os/support/List.h (revision 529cd177b573aaba391c8adc9c9f5ad76a14bf81)
1 /*
2  * Copyright 2001-2009 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _BE_LIST_H
6 #define _BE_LIST_H
7 
8 
9 #include <SupportDefs.h>
10 
11 
12 class BList {
13 public:
14 								BList(int32 count = 20);
15 								BList(const BList& other);
16 	virtual						~BList();
17 
18 			BList&				operator=(const BList& other);
19 			bool				operator==(const BList& other) const;
20 			bool				operator!=(const BList& other) const;
21 
22 	// Adding and removing items
23 			bool				AddItem(void* item, int32 index);
24 			bool				AddItem(void* item);
25 			bool				AddList(const BList* list, int32 index);
26 			bool				AddList(const BList* list);
27 
28 			bool				RemoveItem(void* item);
29 			void*				RemoveItem(int32 index);
30 			bool				RemoveItems(int32 index, int32 count);
31 			bool				ReplaceItem(int32 index, void* item);
32 
33 			void				MakeEmpty();
34 
35 	// Reorder items
36 			void				SortItems(int (*compareFunc)(const void*,
37 									const void*));
38 			bool				SwapItems(int32 indexA, int32 indexB);
39 			bool				MoveItem(int32 from, int32 to);
40 
41 	// Retrieve items
42 			void*				ItemAt(int32 index) const;
43 			void*				FirstItem() const;
44 			void*				ItemAtFast(int32 index) const;
45 									// does not check the array bounds!
46 
47 			void*				LastItem() const;
48 			void*				Items() const;
49 
50 	// Query
51 			bool				HasItem(void* item) const;
52 			bool				HasItem(const void* item) const;
53 			int32				IndexOf(void* item) const;
54 			int32				IndexOf(const void* item) const;
55 			int32				CountItems() const;
56 			bool				IsEmpty() const;
57 
58 	// Iteration
59 			void				DoForEach(bool (*func)(void* item));
60 			void				DoForEach(bool (*func)(void* item,
61 									void* arg2), void* arg2);
62 
63 private:
64 	virtual	void				_ReservedList1();
65 	virtual	void				_ReservedList2();
66 
67 			bool				_ResizeArray(int32 count);
68 
69 private:
70 			void**				fObjectList;
71 			int32				fPhysicalSize;
72 			int32				fItemCount;
73 			int32				fBlockSize;
74 			int32				fResizeThreshold;
75 
76 			uint32				_reserved[1];
77 };
78 
79 
80 #endif // _BE_LIST_H
81