36std::vector<std::string>
Split(
const std::string& s,
37 const std::string& delimiters);
51std::vector<std::string>
Tokenize(
const std::string& s,
const std::string& delimiters);
62 if constexpr (std::is_convertible_v<T, std::string_view>) {
63 sv = std::forward<T>(t);
64 }
else if constexpr (std::is_convertible_v<T, std::string>) {
71 static_assert(internal::always_false_v<T>,
72 "Implicit conversion to std::string or std::string_view not possible");
76 while (!sv.empty() && isspace(sv.front())) {
81 while (!sv.empty() && isspace(sv.back())) {
85 return std::string(sv);
89extern template std::string
Trim(
const char*&);
90extern template std::string
Trim(
const char*&&);
91extern template std::string
Trim(
const std::string&);
92extern template std::string
Trim(
const std::string&&);
93extern template std::string
Trim(std::string_view&);
94extern template std::string
Trim(std::string_view&&);
97template <
typename ContainerT,
typename SeparatorT>
98std::string
Join(
const ContainerT& things, SeparatorT separator) {
103 std::ostringstream result;
104 result << *things.begin();
105 for (
auto it = std::next(things.begin()); it != things.end(); ++it) {
106 result << separator << *it;
112extern template std::string
Join(
const std::vector<std::string>&,
char);
113extern template std::string
Join(
const std::vector<const char*>&,
char);
114extern template std::string
Join(
const std::vector<std::string>&,
const std::string&);
115extern template std::string
Join(
const std::vector<const char*>&,
const std::string&);
123bool EndsWith(std::string_view s, std::string_view suffix);
124bool EndsWith(std::string_view s,
char suffix);
134 s->remove_prefix(
prefix.size());
141 if (!
EndsWith(*s, suffix))
return false;
142 s->remove_suffix(suffix.size());
148[[nodiscard]] std::string
StringReplace(std::string_view s, std::string_view from,
149 std::string_view to,
bool all);
constexpr bool always_false_v
Definition: strings.h:55
bool EndsWithIgnoreCase(std::string_view s, std::string_view suffix)
Definition: strings.cpp:111
bool StartsWithIgnoreCase(std::string_view s, std::string_view prefix)
Definition: strings.cpp:99
std::string Join(const ContainerT &things, SeparatorT separator)
Definition: strings.h:98
bool StartsWith(std::string_view s, std::string_view prefix)
Definition: strings.cpp:91
std::vector< std::string > Tokenize(const std::string &s, const std::string &delimiters)
Definition: strings.cpp:55
std::string ErrnoNumberAsString(int errnum)
Definition: strings.cpp:139
std::vector< std::string > Split(const std::string &s, const std::string &delimiters)
Definition: strings.cpp:37
std::string StringReplace(std::string_view s, std::string_view from, std::string_view to, bool all)
Definition: strings.cpp:120
std::string Trim(T &&t)
Definition: strings.h:59
bool EqualsIgnoreCase(std::string_view lhs, std::string_view rhs)
Definition: strings.cpp:116
bool EndsWith(std::string_view s, std::string_view suffix)
Definition: strings.cpp:103
bool ConsumeSuffix(std::string_view *s, std::string_view suffix)
Definition: strings.h:140
bool ConsumePrefix(std::string_view *s, std::string_view prefix)
Definition: strings.h:132
std::string_view prefix
Definition: kernel_log_server.cc:41