1a8c51b3fSopenharmony_ci// Copyright 2015 Google Inc. All rights reserved. 2a8c51b3fSopenharmony_ci// 3a8c51b3fSopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License"); 4a8c51b3fSopenharmony_ci// you may not use this file except in compliance with the License. 5a8c51b3fSopenharmony_ci// You may obtain a copy of the License at 6a8c51b3fSopenharmony_ci// 7a8c51b3fSopenharmony_ci// http://www.apache.org/licenses/LICENSE-2.0 8a8c51b3fSopenharmony_ci// 9a8c51b3fSopenharmony_ci// Unless required by applicable law or agreed to in writing, software 10a8c51b3fSopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS, 11a8c51b3fSopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12a8c51b3fSopenharmony_ci// See the License for the specific language governing permissions and 13a8c51b3fSopenharmony_ci// limitations under the License. 14a8c51b3fSopenharmony_ci 15a8c51b3fSopenharmony_ci#include <benchmark/benchmark.h> 16a8c51b3fSopenharmony_ci 17a8c51b3fSopenharmony_cinamespace benchmark { 18a8c51b3fSopenharmony_ci 19a8c51b3fSopenharmony_cinamespace { 20a8c51b3fSopenharmony_ci 21a8c51b3fSopenharmony_ci// Compute the total size of a pack of std::strings 22a8c51b3fSopenharmony_cisize_t size_impl() { return 0; } 23a8c51b3fSopenharmony_ci 24a8c51b3fSopenharmony_citemplate <typename Head, typename... Tail> 25a8c51b3fSopenharmony_cisize_t size_impl(const Head& head, const Tail&... tail) { 26a8c51b3fSopenharmony_ci return head.size() + size_impl(tail...); 27a8c51b3fSopenharmony_ci} 28a8c51b3fSopenharmony_ci 29a8c51b3fSopenharmony_ci// Join a pack of std::strings using a delimiter 30a8c51b3fSopenharmony_ci// TODO: use absl::StrJoin 31a8c51b3fSopenharmony_civoid join_impl(std::string&, char) {} 32a8c51b3fSopenharmony_ci 33a8c51b3fSopenharmony_citemplate <typename Head, typename... Tail> 34a8c51b3fSopenharmony_civoid join_impl(std::string& s, const char delimiter, const Head& head, 35a8c51b3fSopenharmony_ci const Tail&... tail) { 36a8c51b3fSopenharmony_ci if (!s.empty() && !head.empty()) { 37a8c51b3fSopenharmony_ci s += delimiter; 38a8c51b3fSopenharmony_ci } 39a8c51b3fSopenharmony_ci 40a8c51b3fSopenharmony_ci s += head; 41a8c51b3fSopenharmony_ci 42a8c51b3fSopenharmony_ci join_impl(s, delimiter, tail...); 43a8c51b3fSopenharmony_ci} 44a8c51b3fSopenharmony_ci 45a8c51b3fSopenharmony_citemplate <typename... Ts> 46a8c51b3fSopenharmony_cistd::string join(char delimiter, const Ts&... ts) { 47a8c51b3fSopenharmony_ci std::string s; 48a8c51b3fSopenharmony_ci s.reserve(sizeof...(Ts) + size_impl(ts...)); 49a8c51b3fSopenharmony_ci join_impl(s, delimiter, ts...); 50a8c51b3fSopenharmony_ci return s; 51a8c51b3fSopenharmony_ci} 52a8c51b3fSopenharmony_ci} // namespace 53a8c51b3fSopenharmony_ci 54a8c51b3fSopenharmony_ciBENCHMARK_EXPORT 55a8c51b3fSopenharmony_cistd::string BenchmarkName::str() const { 56a8c51b3fSopenharmony_ci return join('/', function_name, args, min_time, min_warmup_time, iterations, 57a8c51b3fSopenharmony_ci repetitions, time_type, threads); 58a8c51b3fSopenharmony_ci} 59a8c51b3fSopenharmony_ci} // namespace benchmark 60