1193323Sed#ifndef BENCHMARK_REGISTER_H
2193323Sed#define BENCHMARK_REGISTER_H
3193323Sed
4193323Sed#include <vector>
5193323Sed
6193323Sed#include "check.h"
7193323Sed
8193323Sedtemplate <typename T>
9193323Sedvoid AddRange(std::vector<T>* dst, T lo, T hi, int mult) {
10193323Sed  CHECK_GE(lo, 0);
11193323Sed  CHECK_GE(hi, lo);
12193323Sed  CHECK_GE(mult, 2);
13193323Sed
14193323Sed  // Add "lo"
15193323Sed  dst->push_back(lo);
16193323Sed
17193323Sed  static const T kmax = std::numeric_limits<T>::max();
18249423Sdim
19193323Sed  // Now space out the benchmarks in multiples of "mult"
20198090Srdivacky  for (T i = 1; i < kmax / mult; i *= mult) {
21249423Sdim    if (i >= hi) break;
22198090Srdivacky    if (i > lo) {
23193323Sed      dst->push_back(i);
24193323Sed    }
25193323Sed  }
26193323Sed
27193323Sed  // Add "hi" (if different from "lo")
28193323Sed  if (hi != lo) {
29193323Sed    dst->push_back(hi);
30193323Sed  }
31193323Sed}
32193323Sed
33193323Sed#endif  // BENCHMARK_REGISTER_H
34193323Sed