8 #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 5 && __GNUC_MINOR__ < 8 9 #define _GLIBCXX_USE_NANOSLEEP 25 using clock = std::chrono::steady_clock;
31 using time_print_t = std::function<std::string(std::string, std::string)>;
47 static std::string
Simple(std::string title, std::string time) {
return title +
": " + time; }
50 static std::string
Big(std::string title, std::string time) {
51 return std::string(
"-----------------------------------------\n") +
"| " + title +
" | Time = " + time +
"\n" +
52 "-----------------------------------------";
61 std::string
time_it(std::function<
void()> f,
double target_time = 1) {
69 std::chrono::duration<double> elapsed = clock::now() -
start_;
70 total_time = elapsed.count();
71 }
while(n++ < 100u && total_time < target_time);
73 std::string out =
make_time_str(total_time / static_cast<double>(n)) +
" for " + std::to_string(n) +
" tries";
81 std::chrono::duration<double> elapsed = stop -
start_;
82 double time = elapsed.count() /
static_cast<double>(
cycles);
89 auto print_it = [](
double x, std::string unit) {
90 std::array<char, 50> buffer;
91 std::snprintf(buffer.data(), 50,
"%.5g", x);
92 return buffer.data() + std::string(
" ") + unit;
96 return print_it(time * 1000000000,
"ns");
98 return print_it(time * 1000000,
"us");
100 return print_it(time * 1000,
"ms");
102 return print_it(time,
"s");
static std::string Big(std::string title, std::string time)
This is a fancy print function with — headers.
Definition: Timer.hpp:50
std::string to_string() const
This is the main function, it creates a string.
Definition: Timer.hpp:107
std::chrono::steady_clock clock
This is a typedef to make clocks easier to use.
Definition: Timer.hpp:25
static std::string Simple(std::string title, std::string time)
Standard print function, this one is set by default.
Definition: Timer.hpp:47
std::string make_time_str(double time) const
This prints out a time string from a time.
Definition: Timer.hpp:88
AutoTimer(std::string title="Timer", time_print_t time_print=Simple)
Reimplementing the constructor is required in GCC 4.7.
Definition: Timer.hpp:120
std::chrono::time_point< clock > time_point
This typedef is for points in time.
Definition: Timer.hpp:28
std::string make_time_str() const
This formats the numerical value for the time string.
Definition: Timer.hpp:79
This class prints out the time upon destruction.
Definition: Timer.hpp:117
std::string time_it(std::function< void()> f, double target_time=1)
Time a function by running it multiple times. Target time is the len to target.
Definition: Timer.hpp:61
Timer(std::string title="Timer", time_print_t time_print=Simple)
Standard constructor, can set title and print function.
Definition: Timer.hpp:57
size_t cycles
This is the number of times cycles (print divides by this number)
Definition: Timer.hpp:43
time_print_t time_print_
This is the function that is used to format most of the timing message.
Definition: Timer.hpp:37
std::ostream & operator<<(std::ostream &in, const T &item)
output streaming for enumerations
Definition: StringTools.hpp:23
std::function< std::string(std::string, std::string)> time_print_t
This is the type of a printing function, you can make your own.
Definition: Timer.hpp:31
time_point start_
This is the starting point (when the timer was created)
Definition: Timer.hpp:40
std::string title_
This is the title of the timer.
Definition: Timer.hpp:34
~AutoTimer()
This destructor prints the string.
Definition: Timer.hpp:124
Timer & operator/(size_t val)
Division sets the number of cycles to divide by (no graphical change)
Definition: Timer.hpp:110
This is a simple timer with pretty printing. Creating the timer starts counting.
Definition: Timer.hpp:22