| 16295 | struct RowBreak {}; |
| 16296 | |
| 16297 | class Duration { |
| 16298 | enum class Unit { |
| 16299 | Auto, |
| 16300 | Nanoseconds, |
| 16301 | Microseconds, |
| 16302 | Milliseconds, |
| 16303 | Seconds, |
| 16304 | Minutes |
| 16305 | }; |
| 16306 | static const uint64_t s_nanosecondsInAMicrosecond = 1000; |
| 16307 | static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond; |
| 16308 | static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond; |
| 16309 | static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond; |
| 16310 | |
| 16311 | double m_inNanoseconds; |
| 16312 | Unit m_units; |
| 16313 | |
| 16314 | public: |
| 16315 | explicit Duration(double inNanoseconds, Unit units = Unit::Auto) |
| 16316 | : m_inNanoseconds(inNanoseconds), |
| 16317 | m_units(units) { |
| 16318 | if (m_units == Unit::Auto) { |
| 16319 | if (m_inNanoseconds < s_nanosecondsInAMicrosecond) |
| 16320 | m_units = Unit::Nanoseconds; |
| 16321 | else if (m_inNanoseconds < s_nanosecondsInAMillisecond) |
| 16322 | m_units = Unit::Microseconds; |
| 16323 | else if (m_inNanoseconds < s_nanosecondsInASecond) |
| 16324 | m_units = Unit::Milliseconds; |
| 16325 | else if (m_inNanoseconds < s_nanosecondsInAMinute) |
| 16326 | m_units = Unit::Seconds; |
| 16327 | else |
| 16328 | m_units = Unit::Minutes; |
| 16329 | } |
| 16330 | |
| 16331 | } |
| 16332 | |
| 16333 | auto value() const -> double { |
| 16334 | switch (m_units) { |
| 16335 | case Unit::Microseconds: |
| 16336 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMicrosecond); |
| 16337 | case Unit::Milliseconds: |
| 16338 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMillisecond); |
| 16339 | case Unit::Seconds: |
| 16340 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInASecond); |
| 16341 | case Unit::Minutes: |
| 16342 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMinute); |
| 16343 | default: |
| 16344 | return m_inNanoseconds; |
| 16345 | } |
| 16346 | } |
| 16347 | auto unitsAsString() const -> std::string { |
| 16348 | switch (m_units) { |
| 16349 | case Unit::Nanoseconds: |
| 16350 | return "ns"; |
| 16351 | case Unit::Microseconds: |
| 16352 | return "us"; |
| 16353 | case Unit::Milliseconds: |
| 16354 | return "ms"; |
no outgoing calls
no test coverage detected