1 #ifndef BENCHMARK_STRING_UTIL_H_
2 #define BENCHMARK_STRING_UTIL_H_
8 #include "internal_macros.h"
12 void AppendHumanReadable(int n
, std::string
* str
);
14 std::string
HumanReadableNumber(double n
, double one_k
= 1024.0);
16 #if defined(__MINGW32__)
17 __attribute__((format(__MINGW_PRINTF_FORMAT
, 1, 2)))
18 #elif defined(__GNUC__)
19 __attribute__((format(printf
, 1, 2)))
22 StrFormat(const char* format
, ...);
24 inline std::ostream
& StrCatImp(std::ostream
& out
) BENCHMARK_NOEXCEPT
{
28 template <class First
, class... Rest
>
29 inline std::ostream
& StrCatImp(std::ostream
& out
, First
&& f
, Rest
&&... rest
) {
30 out
<< std::forward
<First
>(f
);
31 return StrCatImp(out
, std::forward
<Rest
>(rest
)...);
34 template <class... Args
>
35 inline std::string
StrCat(Args
&&... args
) {
36 std::ostringstream ss
;
37 StrCatImp(ss
, std::forward
<Args
>(args
)...);
41 std::vector
<std::string
> StrSplit(const std::string
& str
, char delim
);
43 // Disable lint checking for this block since it re-implements C functions.
45 #ifdef BENCHMARK_STL_ANDROID_GNUSTL
47 * GNU STL in Android NDK lacks support for some C++11 functions, including
48 * stoul, stoi, stod. We reimplement them here using C functions strtoul,
49 * strtol, strtod. Note that reimplemented functions are in benchmark::
50 * namespace, not std:: namespace.
52 unsigned long stoul(const std::string
& str
, size_t* pos
= nullptr,
54 int stoi(const std::string
& str
, size_t* pos
= nullptr, int base
= 10);
55 double stod(const std::string
& str
, size_t* pos
= nullptr);
57 using std::stod
; // NOLINT(misc-unused-using-decls)
58 using std::stoi
; // NOLINT(misc-unused-using-decls)
59 using std::stoul
; // NOLINT(misc-unused-using-decls)
63 } // end namespace benchmark
65 #endif // BENCHMARK_STRING_UTIL_H_