17 #ifndef SHARED_STRINGTRANSFORM_H
18 #define SHARED_STRINGTRANSFORM_H
21 #include <boost/config.hpp>
22 #include <boost/regex.hpp>
24 #include <string_view>
35 const boost::regex& reg_expr,
36 const std::function<
void(std::string&,
const boost::smatch&)>& shim_fn);
39 template <
typename... Ts>
41 std::ostringstream oss;
42 (oss << ... << std::forward<Ts>(
args));
56 const std::vector<std::pair<size_t, size_t>>& literal_positions);
60 std::string
join(
T const& container, std::string
const& delim) {
62 if (!container.empty()) {
63 ss << container.front();
64 for (
auto itr = std::next(container.cbegin()); itr != container.cend(); ++itr) {
73 std::ostringstream oss;
90 inline std::string
to_upper(
const std::string& str) {
92 std::transform(str_uc.begin(), str_uc.end(), str_uc.begin(), ::toupper);
96 inline std::string
to_lower(
const std::string& str) {
98 std::transform(str_lc.begin(), str_lc.end(), str_lc.begin(), ::tolower);
105 std::vector<std::string>
split(std::string_view str,
107 std::string_view delim = {},
108 std::optional<size_t> maxsplit = std::nullopt);
111 std::string
strip(std::string_view str);
116 std::string& str) noexcept;
128 template <
typename T>
131 if constexpr (std::is_base_of_v<std::string, std::remove_reference_t<decltype(parm)>>) {
132 return std::forward<T>(parm);
136 else if constexpr (std::is_array_v<std::remove_reference_t<decltype(parm)>>) {
137 return std::forward<T>(parm);
141 else if constexpr (std::is_same_v<std::remove_reference_t<decltype(parm)>,
143 std::is_same_v<std::remove_reference_t<decltype(parm)>,
char*>) {
144 return std::forward<T>(parm);
148 else if constexpr (std::is_integral_v<std::remove_reference_t<decltype(parm)>> ||
149 std::is_floating_point_v<std::remove_reference_t<decltype(parm)>>) {
155 static_assert(std::is_base_of_v<
void, decltype(parm)>);
156 return std::string();
162 template <
typename... Types>
169 void append(std::string_view moretxt) { txt += moretxt; }
172 (
j.append(
stringlike(std::forward<Types>(parms))), ...);
173 return std::move(
j.txt);
176 template <
typename... Types>
177 std::string
concat_with(std::string_view with, Types&&... parms) {
179 JoinerWith(std::string_view
join) :
join(join), first(
true) {}
181 std::string_view
join;
185 void append(std::string_view moretxt) {
195 (
j.append(
stringlike(std::forward<Types>(parms))), ...);
196 return std::move(
j.txt);
200 #endif // SHARED_STRINGTRANSFORM_H
std::string filename(char const *path)
size_t append(FILE *f, const size_t size, int8_t *buf)
Appends the specified number of bytes to the end of the file f from buf.