CalcMySky  v0.3.1
timing.hpp
1 #ifndef INCLUDE_ONCE_DEB2337F_9F23_4272_A108_A1F407876313
2 #define INCLUDE_ONCE_DEB2337F_9F23_4272_A108_A1F407876313
3 
4 template<typename T>
5 std::string formatDeltaTime(const std::chrono::time_point<T> timeBegin, const std::chrono::time_point<T> timeEnd)
6 {
7  const auto microsecTaken=std::chrono::duration_cast<std::chrono::microseconds>(timeEnd-timeBegin).count();
8  const auto secondsTaken=1e-6*microsecTaken;
9  std::ostringstream ss;
10  if(secondsTaken < 1e-3)
11  {
12  ss << microsecTaken << u8" \u03bcs";
13  }
14  else if(secondsTaken < 1)
15  {
16  ss << secondsTaken*1000 << " ms";
17  }
18  else if(secondsTaken < 60)
19  {
20  ss << secondsTaken << " s";
21  }
22  else
23  {
24  auto remainder=secondsTaken;
25  const auto d = int(remainder/(24*3600));
26  remainder -= d*(24*3600);
27  const auto h = int(remainder/3600);
28  remainder -= h*3600;
29  const auto m = int(remainder/60);
30  remainder -= m*60;
31  const auto s = std::lround(remainder);
32  if(d)
33  ss << d << "d";
34  if(d || h)
35  ss << h << "h";
36  if(d || h || m)
37  ss << m << "m";
38  ss << s << "s";
39  }
40  return ss.str();
41 }
42 
43 #endif