xref: /haiku/headers/os/support/StringList.h (revision 29e8fa5922c9f9a5eb09a2fcc92e7fb321d4cc59)
1 /*
2  * Copyright 2011 Haiku, Inc. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 #ifndef _STRING_LIST_H
6 #define _STRING_LIST_H
7 
8 
9 #include <BeBuild.h>
10 #include <Flattenable.h>
11 #include <List.h>
12 #include <String.h>
13 
14 
15 class BStringList : public BFlattenable {
16 public:
17 								BStringList(int32 count = 20);
18 								BStringList(const BStringList& other);
19 	virtual						~BStringList();
20 
21 	// Adding and removing items.
22 			bool				Add(const BString& string, int32 index);
23 			bool				Add(const BString& string);
24 			bool				Add(const BStringList& list, int32 index);
25 			bool				Add(const BStringList& list);
26 
27 			bool				Remove(const BString& string,
28 									bool ignoreCase = false);
29 			bool				Remove(const BStringList& list,
30 									bool ignoreCase = false);
31 			BString				Remove(int32 index);
32 			bool				Remove(int32 index, int32 count);
33 			bool				Replace(int32 index, const BString& string);
34 
35 			void				MakeEmpty();
36 
37 	// Reorder items
38 			void				Sort(bool ignoreCase = false);
39 									// TODO: Sort() with custom sort function.
40 			bool				Swap(int32 indexA, int32 indexB);
41 			bool				Move(int32 fromIndex, int32 toIndex);
42 
43 	// Retrieve items
44 			BString				StringAt(int32 index) const;
45 			BString				First() const;
46 			BString				Last() const;
47 
48 	// Query
49 			bool				HasString(const BString& string,
50 									bool ignoreCase = false) const;
51 			int32				IndexOf(const BString& string,
52 									bool ignoreCase = false) const;
53 			int32				CountStrings() const;
54 			bool				IsEmpty() const;
55 
56 			BString				Join(const char* separator, int32 length = -1)
57 									const;
58 
59 	// Iteration
60 			void				DoForEach(bool (*func)(const BString& string));
61 			void				DoForEach(bool (*func)(const BString& string,
62 									void* arg2), void* arg2);
63 
64 			BStringList&		operator=(const BStringList& other);
65 			bool				operator==(const BStringList& other) const;
66 			bool				operator!=(const BStringList& other) const;
67 
68 	// BFlattenable
69 	virtual	bool				IsFixedSize() const;
70 	virtual	type_code			TypeCode() const;
71 	virtual	bool				AllowsTypeCode(type_code code) const;
72 	virtual	ssize_t				FlattenedSize() const;
73 	virtual	status_t			Flatten(void* buffer, ssize_t size) const;
74 	virtual	status_t			Unflatten(type_code code, const void* buffer,
75 									ssize_t size);
76 
77 private:
78 			void				_IncrementRefCounts() const;
79 			void				_DecrementRefCounts() const;
80 
81 			BString				_Join(const char* separator, int32 length)
82 									const;
83 
84 private:
85 			BList				fStrings;
86 };
87 
88 
89 inline bool
HasString(const BString & string,bool ignoreCase)90 BStringList::HasString(const BString& string, bool ignoreCase) const
91 {
92 	return IndexOf(string, ignoreCase) >= 0;
93 }
94 
95 
96 inline bool
97 BStringList::operator!=(const BStringList& other) const
98 {
99 	return !(*this == other);
100 }
101 
102 
103 #endif	// _STRING_LIST_H
104