1 #ifndef BENCHMARK_STRING_UTIL_H_
2 #define BENCHMARK_STRING_UTIL_H_
9 #include "benchmark/benchmark.h"
10 #include "benchmark/export.h"
12 #include "internal_macros.h"
17 std::string
HumanReadableNumber(double n
, Counter::OneK one_k
);
20 #if defined(__MINGW32__)
21 __attribute__((format(__MINGW_PRINTF_FORMAT
, 1, 2)))
22 #elif defined(__GNUC__)
23 __attribute__((format(printf
, 1, 2)))
26 StrFormat(const char* format
, ...);
28 inline std::ostream
& StrCatImp(std::ostream
& out
) BENCHMARK_NOEXCEPT
{
32 template <class First
, class... Rest
>
33 inline std::ostream
& StrCatImp(std::ostream
& out
, First
&& f
, Rest
&&... rest
) {
34 out
<< std::forward
<First
>(f
);
35 return StrCatImp(out
, std::forward
<Rest
>(rest
)...);
38 template <class... Args
>
39 inline std::string
StrCat(Args
&&... args
) {
40 std::ostringstream ss
;
41 StrCatImp(ss
, std::forward
<Args
>(args
)...);
46 std::vector
<std::string
> StrSplit(const std::string
& str
, char delim
);
48 // Disable lint checking for this block since it re-implements C functions.
50 #ifdef BENCHMARK_STL_ANDROID_GNUSTL
52 * GNU STL in Android NDK lacks support for some C++11 functions, including
53 * stoul, stoi, stod. We reimplement them here using C functions strtoul,
54 * strtol, strtod. Note that reimplemented functions are in benchmark::
55 * namespace, not std:: namespace.
57 unsigned long stoul(const std::string
& str
, size_t* pos
= nullptr,
59 int stoi(const std::string
& str
, size_t* pos
= nullptr, int base
= 10);
60 double stod(const std::string
& str
, size_t* pos
= nullptr);
62 using std::stod
; // NOLINT(misc-unused-using-decls)
63 using std::stoi
; // NOLINT(misc-unused-using-decls)
64 using std::stoul
; // NOLINT(misc-unused-using-decls)
68 } // end namespace benchmark
70 #endif // BENCHMARK_STRING_UTIL_H_