blob: c3d53bfd3345032ebd76928330c81c095163c9cd [file] [log] [blame]
Eric Fiselierb08d8b12016-07-19 23:07:03 +00001#ifndef BENCHMARK_STRING_UTIL_H_
2#define BENCHMARK_STRING_UTIL_H_
3
Eric Fiselierb08d8b12016-07-19 23:07:03 +00004#include <sstream>
Eric Fiselierfbc9ff22016-11-05 00:30:27 +00005#include <string>
Eric Fiselierb08d8b12016-07-19 23:07:03 +00006#include <utility>
7#include "internal_macros.h"
8
9namespace benchmark {
10
11void AppendHumanReadable(int n, std::string* str);
12
Eric Fiselier19039762018-01-18 04:23:01 +000013std::string HumanReadableNumber(double n, double one_k = 1024.0);
Eric Fiselierb08d8b12016-07-19 23:07:03 +000014
15std::string StringPrintF(const char* format, ...);
16
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000017inline std::ostream& StringCatImp(std::ostream& out) BENCHMARK_NOEXCEPT {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000018 return out;
19}
20
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000021template <class First, class... Rest>
22inline std::ostream& StringCatImp(std::ostream& out, First&& f,
23 Rest&&... rest) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000024 out << std::forward<First>(f);
25 return StringCatImp(out, std::forward<Rest>(rest)...);
26}
27
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000028template <class... Args>
29inline std::string StrCat(Args&&... args) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000030 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
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000038} // end namespace benchmark
Eric Fiselierb08d8b12016-07-19 23:07:03 +000039
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000040#endif // BENCHMARK_STRING_UTIL_H_