17 #ifndef SHARED_STRINGTRANSFORM_H
18 #define SHARED_STRINGTRANSFORM_H
22 #include <boost/regex.hpp>
30 #if __cplusplus >= 201703L
31 #include <string_view>
32 #endif // __cplusplus >= 201703L
35 const boost::regex& reg_expr,
36 const std::function<
void(std::string&,
const boost::smatch&)>& shim_fn);
46 const std::vector<std::pair<size_t, size_t>>& literal_positions);
49 std::string
join(T
const& container, std::string
const& delim) {
51 if (!container.empty()) {
52 ss << container.front();
53 for (
auto itr = std::next(container.cbegin()); itr != container.cend(); ++itr) {
62 std::ostringstream oss;
73 inline std::string
to_upper(
const std::string& str) {
75 std::transform(str_uc.begin(), str_uc.end(), str_uc.begin(), ::toupper);
82 std::vector<std::string>
split(
const std::string& str,
const std::string& delim);
85 std::string
strip(
const std::string& str);
89 std::string& str) noexcept;
92 #if __cplusplus >= 201703L
96 inline decltype(
auto) stringlike(T&& parm) {
98 if constexpr (std::is_base_of_v<std::string, std::remove_reference_t<decltype(parm)>>) {
99 return std::forward<T>(parm);
103 else if constexpr (std::is_array_v<std::remove_reference_t<decltype(parm)>>) {
104 return std::forward<T>(parm);
108 else if constexpr (std::is_same_v<std::remove_reference_t<decltype(parm)>,
110 std::is_same_v<std::remove_reference_t<decltype(parm)>,
char*>) {
111 return std::forward<T>(parm);
115 else if constexpr (std::is_integral_v<std::remove_reference_t<decltype(parm)>> ||
116 std::is_floating_point_v<std::remove_reference_t<decltype(parm)>>) {
122 static_assert(std::is_base_of_v<
void, decltype(parm)>);
123 return std::string();
129 template <
typename... Types>
130 std::string concat(Types&&... parms) {
136 void append(std::string_view moretxt) { txt += moretxt; }
139 (j.append(stringlike(std::forward<Types>(parms))), ...);
140 return std::move(j.txt);
143 template <
typename... Types>
144 std::string concat_with(std::string_view with, Types&&... parms) {
146 JoinerWith(std::string_view
join) : join(join), first(
true) {}
148 std::string_view
join;
152 void append(std::string_view moretxt) {
162 (j.append(stringlike(std::forward<Types>(parms))), ...);
163 return std::move(j.txt);
165 #endif // __cplusplus >= 201703L
167 #endif // SHARED_STRINGTRANSFORM_H
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.
bool g_enable_smem_group_by true