1#ifndef BENCHMARK_STRING_UTIL_H_ 2#define BENCHMARK_STRING_UTIL_H_ 3 4#include <sstream> 5#include <string> 6#include <utility> 7#include "internal_macros.h" 8 9namespace benchmark { 10 11void AppendHumanReadable(int n, std::string* str); 12 13std::string HumanReadableNumber(double n); 14 15std::string StringPrintF(const char* format, ...); 16 17inline std::ostream& StringCatImp(std::ostream& out) BENCHMARK_NOEXCEPT { 18 return out; 19} 20 21template <class First, class... Rest> 22inline std::ostream& StringCatImp(std::ostream& out, First&& f, 23 Rest&&... rest) { 24 out << std::forward<First>(f); 25 return StringCatImp(out, std::forward<Rest>(rest)...); 26} 27 28template <class... Args> 29inline std::string StrCat(Args&&... args) { 30 std::ostringstream ss; 31 StringCatImp(ss, std::forward<Args>(args)...); 32 return ss.str(); 33} 34 35void ReplaceAll(std::string* str, const std::string& from, 36 const std::string& to); 37 38} // end namespace benchmark 39 40#endif // BENCHMARK_STRING_UTIL_H_ 41