12#ifndef OPENVPN_COMMON_FORMAT_H
13#define OPENVPN_COMMON_FORMAT_H
32namespace print_detail {
34inline void print(std::ostream &os,
char delim,
const T &first)
39template <
typename T,
typename... Args>
40inline void print(std::ostream &os,
char delim,
const T &first, Args... args)
45 print(os, delim, args...);
49template <
typename... Args>
50inline std::string
printd(
char delim, Args... args)
52 std::ostringstream os;
57template <
typename... Args>
58inline std::string
print(Args... args)
63template <
typename... Args>
64inline std::string
prints(Args... args)
66 return printd(
' ', args...);
76namespace print_formatted_detail {
89 str_.reserve(reserve);
94 typename std::enable_if<std::is_arithmetic<T>::value,
int>::type = 0>
101 template <
typename T,
102 typename std::enable_if<!std::is_arithmetic<T>::value,
int>::type = 0>
105 std::ostringstream os;
139 str_ += value ?
"true" :
"false";
150 return std::move(str_);
167 template <
typename T>
212template <
typename OUTPUT>
229 template <
typename T>
236 template <
typename T,
typename... Args>
252 template <
typename T>
255 while (
fi !=
fmt.end())
257 const char c = *
fi++;
265 out.append((
char)quote);
268 out.append((
char)quote);
308 std::string::const_iterator
fi;
313template <
typename... Args>
314inline std::string
printfmt(
const std::string &fmt, Args... args)
316#ifdef OPENVPN_PLATFORM_ANDROID
326#define OPENVPN_FMT(...) OPENVPN_LOG_STRING(printfmt(__VA_ARGS__))
329#define OPENVPN_THROW_FMT(EXC, ...) throw EXC(printfmt(__VA_ARGS__))
void print(std::ostream &os, char delim, const T &first)
Support deferred server-side state creation when client connects.
std::string print(Args... args)
std::string to_string(T value)
std::string prints(Args... args)
std::string printd(char delim, Args... args)
std::string printfmt(const std::string &fmt, Args... args)