|  | #pragma once | 
|  |  | 
|  | #include <string> | 
|  | #include <string_view> | 
|  | #include <vector> | 
|  |  | 
|  | namespace bmcweb | 
|  | { | 
|  | // This is a naive replacement for boost::split until | 
|  | // https://github.com/llvm/llvm-project/issues/40486 | 
|  | // is resolved | 
|  | inline void split(std::vector<std::string>& strings, std::string_view str, | 
|  | char delim) | 
|  | { | 
|  | size_t start = 0; | 
|  | size_t end = 0; | 
|  | while (end <= str.size()) | 
|  | { | 
|  | end = str.find(delim, start); | 
|  | strings.emplace_back(str.substr(start, end - start)); | 
|  | start = end + 1; | 
|  | } | 
|  | } | 
|  |  | 
|  | inline void append_with_sep(std::string& out, const char sep, | 
|  | const std::string& arg) | 
|  | { | 
|  | if (!out.empty()) | 
|  | { | 
|  | out += sep; | 
|  | } | 
|  | out += arg; | 
|  | } | 
|  |  | 
|  | // join 'args' strings with a separator without creating any intermediate | 
|  | // objects, append to 'out' | 
|  | template <typename... Args> | 
|  | void append_with_sep(std::string& out, const char sep, const std::string& arg, | 
|  | const Args&... args) | 
|  | { | 
|  | append_with_sep(out, sep, arg); | 
|  | append_with_sep(out, sep, args...); | 
|  | } | 
|  |  | 
|  | } // namespace bmcweb |