spdlog/example/utils.h

68 lines
1.5 KiB
C
Raw Normal View History

2014-01-25 08:52:10 -05:00
#pragma once
#include <functional>
#include <chrono>
#include <iostream>
#include <sstream>
#include <iomanip>
#include <locale>
2014-03-06 17:52:50 -05:00
namespace utils
{
2014-01-25 08:52:10 -05:00
template<typename T>
inline std::string format(const T& value)
2014-01-25 08:52:10 -05:00
{
static std::locale loc("");
std::stringstream ss;
ss.imbue(loc);
ss << value;
return ss.str();
}
2014-03-01 07:06:58 -05:00
template<>
inline std::string format(const double & value)
2014-03-01 07:06:58 -05:00
{
static std::locale loc("");
std::stringstream ss;
ss.imbue(loc);
ss << std::fixed << std::setprecision(1) << value;
return ss.str();
}
2014-01-25 10:28:56 -05:00
inline void bench(const std::string& fn_name, const std::chrono::milliseconds &duration, const std::function<void() >& fn)
2014-01-25 08:52:10 -05:00
{
using namespace std::chrono;
typedef steady_clock the_clock;
size_t counter = 0;
seconds print_interval(1);
auto start_time = the_clock::now();
auto lastPrintTime = start_time;
while (true)
{
2014-01-25 08:52:10 -05:00
fn();
++counter;
auto now = the_clock::now();
if (now - start_time >= duration)
break;
if (now - lastPrintTime >= print_interval)
{
2014-01-25 10:28:56 -05:00
std::cout << fn_name << ": " << format(counter) << " per sec" << std::endl;
2014-01-25 08:52:10 -05:00
counter = 0;
lastPrintTime = the_clock::now();
}
}
}
2014-01-25 10:28:56 -05:00
inline void bench(const std::string& fn_name, const std::function<void() >& fn)
{
using namespace std::chrono;
auto start = steady_clock::now();
fn();
auto delta = steady_clock::now() - start;
std::cout << fn_name << ": " << duration_cast<milliseconds>(delta).count() << " ms" << std::endl;
}
2014-01-28 21:08:58 -05:00
}