libpromeki 1.0.0-alpha
PROfessional MEdia toolKIt
 
Loading...
Searching...
No Matches
stringlist.h
Go to the documentation of this file.
1
8#pragma once
9
10
11#include <promeki/config.h>
12#if PROMEKI_ENABLE_CORE
13#include <promeki/namespace.h>
14#include <promeki/string.h>
15#include <promeki/list.h>
16#include <promeki/result.h>
17#include <promeki/datatype.h>
18
19PROMEKI_NAMESPACE_BEGIN
20
21class DataStream;
22
38class StringList : public List<String> {
39 public:
40 PROMEKI_DATATYPE(StringList, DataTypeStringList, 1)
41
42
43 Error writeToStream(DataStream &s) const;
45 template <uint32_t V> static Result<StringList> readFromStream(DataStream &s);
46
47 using List::List;
48 using List::operator+=;
49 using List::operator=;
50
52 using Ptr = SharedPtr<StringList>;
53
61 StringList *_promeki_clone() const { return new StringList(*this); }
62
68 StringList(size_t ct, const char **list) {
69 reserve(ct);
70 for (size_t i = 0; i < ct; ++i) pushToBack(list[i]);
71 }
72
78 String join(const String &delimiter) const {
79 String result;
80 for (auto it = constBegin(); it != constEnd(); ++it) {
81 result += *it;
82 if (it + 1 != constEnd()) result += delimiter;
83 }
84 return result;
85 }
86
92 String toString() const { return join(","); }
93
101 static Result<StringList> fromString(const String &s) {
102 StringList out;
103 if (s.isEmpty()) return makeResult(std::move(out));
104 out = s.split(",");
105 return makeResult(std::move(out));
106 }
107
113 StringList filter(TestFunc func) const {
114 StringList result;
115 for (const auto &item : *this) {
116 if (func(item)) result.pushToBack(item);
117 }
118 return result;
119 }
120};
121
122PROMEKI_NAMESPACE_END
123
124#endif // PROMEKI_ENABLE_CORE