17 #ifndef SHARED_STRINGTRANSFORM_H
18 #define SHARED_STRINGTRANSFORM_H
21 #include <boost/config.hpp>
23 #include <string_view>
36 const boost::regex& reg_expr,
37 const std::function<
void(std::string&,
const boost::smatch&)>& shim_fn);
40 template <
typename... Ts>
42 std::ostringstream oss;
43 (oss << ... << std::forward<Ts>(
args));
57 const std::vector<std::pair<size_t, size_t>>& literal_positions);
61 std::string
join(
T const& container, std::string
const& delim) {
63 if (!container.empty()) {
64 ss << *container.cbegin();
65 for (
auto itr = std::next(container.cbegin()); itr != container.cend(); ++itr) {
74 std::ostringstream oss;
91 inline std::string
to_upper(
const std::string& str) {
93 std::transform(str_uc.begin(), str_uc.end(), str_uc.begin(), ::toupper);
97 inline std::string
to_lower(
const std::string& str) {
99 std::transform(str_lc.begin(), str_lc.end(), str_lc.begin(), ::tolower);
106 std::vector<std::string>
split(std::string_view str,
108 std::string_view delim = {},
109 std::optional<size_t> maxsplit = std::nullopt);
112 std::string_view
sv_strip(std::string_view str);
115 std::string
strip(std::string_view str);
118 std::pair<std::string_view, const char*>
substring(
const std::string& str,
119 size_t substr_length);
124 std::string& str) noexcept;
141 template <
typename T>
144 if constexpr (std::is_base_of_v<std::string,
145 std::remove_reference_t<decltype(parm)>>) {
146 return std::forward<T>(parm);
150 }
else if constexpr (std::is_array_v<
151 std::remove_reference_t<decltype(parm)>>) {
152 return std::forward<T>(parm);
156 }
else if constexpr (std::is_same_v<std::remove_reference_t<decltype(parm)>,
158 std::is_same_v<std::remove_reference_t<decltype(parm)>,
160 return std::forward<T>(parm);
164 }
else if constexpr (std::is_integral_v<std::remove_reference_t<decltype(parm)>> ||
165 std::is_floating_point_v<
166 std::remove_reference_t<decltype(parm)>>) {
172 static_assert(std::is_base_of_v<
void, decltype(parm)>);
173 return std::string();
179 template <
typename... Types>
186 void append(std::string_view moretxt) { txt += moretxt; }
189 (j.append(
stringlike(std::forward<Types>(parms))), ...);
190 return std::move(j.txt);
193 template <
typename... Types>
194 std::string
concat_with(std::string_view with, Types&&... parms) {
196 JoinerWith(std::string_view
join) :
join(join), first(
true) {}
198 std::string_view
join;
202 void append(std::string_view moretxt) {
212 (j.append(
stringlike(std::forward<Types>(parms))), ...);
213 return std::move(j.txt);
217 #endif // SHARED_STRINGTRANSFORM_H
size_t append(FILE *f, const size_t size, const int8_t *buf)
Appends the specified number of bytes to the end of the file f from buf.
OUTPUT transform(INPUT const &input, FUNC const &func)
std::string filename(char const *path)