xref: /haiku/src/apps/icon-o-matic/generic/support/List.h (revision 128277c969aa806add78941cd2972754c37a1572)
1*128277c9SStephan Aßmus /*
2*128277c9SStephan Aßmus  * Copyright 2006, Haiku.
3*128277c9SStephan Aßmus  * Distributed under the terms of the MIT License.
4*128277c9SStephan Aßmus  *
5*128277c9SStephan Aßmus  * Authors:
6*128277c9SStephan Aßmus  *		IngoWeinhold <bonefish@cs.tu-berlin.de>
7*128277c9SStephan Aßmus  *		Stephan Aßmus <superstippi@gmx.de>
8*128277c9SStephan Aßmus  */
9*128277c9SStephan Aßmus 
10*128277c9SStephan Aßmus #ifndef LIST_H
11*128277c9SStephan Aßmus #define LIST_H
12*128277c9SStephan Aßmus 
13*128277c9SStephan Aßmus #include <List.h>
14*128277c9SStephan Aßmus 
15*128277c9SStephan Aßmus template<class T, bool delete_on_destruction = true>
16*128277c9SStephan Aßmus class List : protected BList {
17*128277c9SStephan Aßmus  public:
18*128277c9SStephan Aßmus 	List(int32 count = 10)
BList(count)19*128277c9SStephan Aßmus 		: BList(count) {}
20*128277c9SStephan Aßmus 
~List()21*128277c9SStephan Aßmus 	~List()
22*128277c9SStephan Aßmus 		{ MakeEmpty(); }
23*128277c9SStephan Aßmus 
24*128277c9SStephan Aßmus 	// adding items
AddItem(T value)25*128277c9SStephan Aßmus 	inline void AddItem(T value)
26*128277c9SStephan Aßmus 		{ BList::AddItem((void*)value); }
27*128277c9SStephan Aßmus 
AddItem(T value,int32 index)28*128277c9SStephan Aßmus 	inline void AddItem(T value, int32 index)
29*128277c9SStephan Aßmus 		{ BList::AddItem((void*)value, index); }
30*128277c9SStephan Aßmus 
31*128277c9SStephan Aßmus 	// information
HasItem(T value)32*128277c9SStephan Aßmus 	inline bool HasItem(T value) const
33*128277c9SStephan Aßmus 		{ return BList::HasItem((void*)value); }
34*128277c9SStephan Aßmus 
IndexOf(T value)35*128277c9SStephan Aßmus 	inline int32 IndexOf(T value) const
36*128277c9SStephan Aßmus 		{ return BList::IndexOf((void*)value); }
37*128277c9SStephan Aßmus 
IsEmpty()38*128277c9SStephan Aßmus 	inline bool IsEmpty() const
39*128277c9SStephan Aßmus 		{ return BList::IsEmpty(); }
40*128277c9SStephan Aßmus 
CountItems()41*128277c9SStephan Aßmus 	inline int32 CountItems() const
42*128277c9SStephan Aßmus 		{ return BList::CountItems(); }
43*128277c9SStephan Aßmus 
44*128277c9SStephan Aßmus 	// retrieving items
ItemAt(int32 index)45*128277c9SStephan Aßmus 	inline T ItemAt(int32 index) const
46*128277c9SStephan Aßmus 		{ return (T)BList::ItemAt(index); }
47*128277c9SStephan Aßmus 
ItemAtFast(int32 index)48*128277c9SStephan Aßmus 	inline T ItemAtFast(int32 index) const
49*128277c9SStephan Aßmus 		{ return (T)BList::ItemAtFast(index); }
50*128277c9SStephan Aßmus 
FirstItem()51*128277c9SStephan Aßmus 	inline T FirstItem() const
52*128277c9SStephan Aßmus 		{ return (T)BList::FirstItem(); }
53*128277c9SStephan Aßmus 
LastItem()54*128277c9SStephan Aßmus 	inline T LastItem() const
55*128277c9SStephan Aßmus 		{ return (T)BList::LastItem(); }
56*128277c9SStephan Aßmus 
57*128277c9SStephan Aßmus 	// removing items
RemoveItem(T value)58*128277c9SStephan Aßmus 	inline bool RemoveItem(T value)
59*128277c9SStephan Aßmus 		{ return BList::RemoveItem((void*)value); }
60*128277c9SStephan Aßmus 
RemoveItem(int32 index)61*128277c9SStephan Aßmus 	inline T RemoveItem(int32 index)
62*128277c9SStephan Aßmus 		{ return (T)BList::RemoveItem(index); }
63*128277c9SStephan Aßmus 
RemoveItems(int32 index,int32 count)64*128277c9SStephan Aßmus 	inline bool RemoveItems(int32 index, int32 count)
65*128277c9SStephan Aßmus 		{ return BList::RemoveItems(index, count); }
66*128277c9SStephan Aßmus 
MakeEmpty()67*128277c9SStephan Aßmus 	inline void MakeEmpty() {
68*128277c9SStephan Aßmus 		if (delete_on_destruction) {
69*128277c9SStephan Aßmus 			// delete all values
70*128277c9SStephan Aßmus 			int32 count = CountItems();
71*128277c9SStephan Aßmus 			for (int32 i = 0; i < count; i++)
72*128277c9SStephan Aßmus 				delete (T)BList::ItemAtFast(i);
73*128277c9SStephan Aßmus 		}
74*128277c9SStephan Aßmus 		BList::MakeEmpty();
75*128277c9SStephan Aßmus 	}
76*128277c9SStephan Aßmus };
77*128277c9SStephan Aßmus 
78*128277c9SStephan Aßmus #endif	// LIST_H
79