1 #ifndef WREPORT_STRING_H
2 #define WREPORT_STRING_H
20 inline bool startswith(
const std::string& str,
const std::string& part)
22 if (str.size() < part.size())
24 return str.substr(0, part.size()) == part;
28 inline bool endswith(
const std::string& str,
const std::string& part)
30 if (str.size() < part.size())
32 return str.substr(str.size() - part.size()) == part;
38 template <
typename ITER>
39 std::string join(
const std::string& sep,
const ITER& begin,
const ITER& end)
41 std::stringstream res;
43 for (ITER i = begin; i != end; ++i)
57 template <
typename ITEMS>
58 std::string join(
const std::string& sep,
const ITEMS& items)
60 std::stringstream res;
62 for (
const auto& i : items)
76 std::string lstrip(
const std::string& str);
81 std::string rstrip(
const std::string& str);
86 std::string strip(
const std::string& str);
89 inline std::string upper(
const std::string& str)
92 res.reserve(str.size());
93 for (std::string::const_iterator i = str.begin(); i != str.end(); ++i)
94 res +=
static_cast<char>(std::toupper(
static_cast<unsigned char>(*i)));
99 inline std::string lower(
const std::string& str)
102 res.reserve(str.size());
103 for (std::string::const_iterator i = str.begin(); i != str.end(); ++i)
104 res +=
static_cast<char>(std::tolower(
static_cast<unsigned char>(*i)));
109 [[deprecated(
"Use path.filename")]] std::string
110 basename(
const std::string& pathname);
113 [[deprecated(
"Use path.parent_path")]] std::string
114 dirname(
const std::string& pathname);
117 [[deprecated(
"Use path / path")]]
void appendpath(std::string& dest,
121 [[deprecated(
"Use path / path")]]
void appendpath(std::string& dest,
122 const std::string& path2);
125 template <
typename S1,
typename S2,
typename... Args>
126 [[deprecated(
"Use path / path")]]
void appendpath(std::string& dest, S1 first,
127 S2 second, Args... next)
129 #pragma GCC diagnostic push
130 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
131 appendpath(dest, first);
132 appendpath(dest, second, next...);
133 #pragma GCC diagnostic pop
137 template <
typename... Args>
138 [[deprecated(
"Use path / path")]] std::string joinpath(Args... components)
140 #pragma GCC diagnostic push
141 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
143 appendpath(res, components...);
145 #pragma GCC diagnostic pop
154 "use path::lexically_normal or std::filesystem::canonical")]] std::string
155 normpath(
const std::string& pathname);
181 Split(
const std::string& str_,
const std::string& sep_,
182 bool skip_empty_ =
false)
190 const Split* split =
nullptr;
201 using iterator_category = std::input_iterator_tag;
202 using value_type = std::string;
203 using difference_type = int;
204 using pointer = std::string*;
205 using reference = std::string&;
215 const std::string& operator*()
const;
216 const std::string* operator->()
const;
218 std::string remainder()
const;
235 std::string encode_cstring(
const std::string& str);
244 std::string decode_cstring(
const std::string& str,
size_t& lenParsed);
247 std::string encode_url(
const std::string& str);
250 std::string decode_url(
const std::string& str);
253 std::string encode_base64(
const std::string& str);
256 std::string encode_base64(
const void* data,
size_t size);
259 std::string decode_base64(
const std::string& str);
size_t end
Position of the first character of the next token.
Definition: string.h:194
const_iterator()
End iterator.
Definition: string.h:210
std::string cur
Current token.
Definition: string.h:192
const_iterator(const Split &split)
Begin iterator.
void skip_separators()
Move end past all the consecutive separators that start at its position.
String functions.
Definition: benchmark.h:13
Split a string where a given substring is found.
Definition: string.h:170
bool skip_empty
If true, skip empty tokens, effectively grouping consecutive separators as if they were a single one.
Definition: string.h:179
const_iterator end()
Return the end iterator to string split.
Definition: string.h:229
const_iterator begin()
Return the begin iterator to split a string on instances of sep.
Definition: string.h:226
std::string sep
Separator.
Definition: string.h:174
std::string str
String to split.
Definition: string.h:172