#pragma once #include #include #include class StringUtil { public: // trim from start (in place) static inline void ltrim(std::string* s) { s->erase(s->begin(), std::find_if(s->begin(), s->end(), [](int ch) { return !std::isspace(ch); })); } // trim from end (in place) static inline void rtrim(std::string* s) { s->erase(std::find_if(s->rbegin(), s->rend(), [](int ch) { return !std::isspace(ch); }).base(), s->end()); } // trim from both ends (in place) static inline void trim(std::string* s) { ltrim(s); rtrim(s); } // trim from start (copying) static inline std::string ltrim(std::string s) { ltrim(&s); return std::move(s); } // trim from end (copying) static inline std::string rtrim(std::string s) { rtrim(&s); return std::move(s); } // trim from both ends (copying) static inline std::string trim(std::string s) { trim(&s); return std::move(s); } }; extern int vasprintf(char** strp, const char* fmt, va_list ap); extern int asprintf(char** strp, const char* fmt, ...);