/* * Copyright 2011 Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _STRING_LIST_H #define _STRING_LIST_H #include #include #include #include class BStringList : public BFlattenable { public: BStringList(int32 count = 20); BStringList(const BStringList& other); virtual ~BStringList(); // Adding and removing items. bool Add(const BString& string, int32 index); bool Add(const BString& string); bool Add(const BStringList& list, int32 index); bool Add(const BStringList& list); bool Remove(const BString& string, bool ignoreCase = false); bool Remove(const BStringList& list, bool ignoreCase = false); BString Remove(int32 index); bool Remove(int32 index, int32 count); bool Replace(int32 index, const BString& string); void MakeEmpty(); // Reorder items void Sort(bool ignoreCase = false); // TODO: Sort() with custom sort function. bool Swap(int32 indexA, int32 indexB); bool Move(int32 fromIndex, int32 toIndex); // Retrieve items BString StringAt(int32 index) const; BString First() const; BString Last() const; // Query bool HasString(const BString& string, bool ignoreCase = false) const; int32 IndexOf(const BString& string, bool ignoreCase = false) const; int32 CountStrings() const; bool IsEmpty() const; BString Join(const char* separator, int32 length = -1) const; // Iteration void DoForEach(bool (*func)(const BString& string)); void DoForEach(bool (*func)(const BString& string, void* arg2), void* arg2); BStringList& operator=(const BStringList& other); bool operator==(const BStringList& other) const; bool operator!=(const BStringList& other) const; // BFlattenable virtual bool IsFixedSize() const; virtual type_code TypeCode() const; virtual bool AllowsTypeCode(type_code code) const; virtual ssize_t FlattenedSize() const; virtual status_t Flatten(void* buffer, ssize_t size) const; virtual status_t Unflatten(type_code code, const void* buffer, ssize_t size); private: void _IncrementRefCounts() const; void _DecrementRefCounts() const; BString _Join(const char* separator, int32 length) const; private: BList fStrings; }; inline bool BStringList::HasString(const BString& string, bool ignoreCase) const { return IndexOf(string, ignoreCase) >= 0; } inline bool BStringList::operator!=(const BStringList& other) const { return !(*this == other); } #endif // _STRING_LIST_H