| 15473 | struct RowBreak {}; |
| 15474 | |
| 15475 | class Duration { |
| 15476 | enum class Unit { |
| 15477 | Auto, |
| 15478 | Nanoseconds, |
| 15479 | Microseconds, |
| 15480 | Milliseconds, |
| 15481 | Seconds, |
| 15482 | Minutes |
| 15483 | }; |
| 15484 | static const uint64_t s_nanosecondsInAMicrosecond = 1000; |
| 15485 | static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond; |
| 15486 | static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond; |
| 15487 | static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond; |
| 15488 | |
| 15489 | uint64_t m_inNanoseconds; |
| 15490 | Unit m_units; |
| 15491 | |
| 15492 | public: |
| 15493 | explicit Duration(double inNanoseconds, Unit units = Unit::Auto) |
| 15494 | : Duration(static_cast<uint64_t>(inNanoseconds), units) { |
| 15495 | } |
| 15496 | |
| 15497 | explicit Duration(uint64_t inNanoseconds, Unit units = Unit::Auto) |
| 15498 | : m_inNanoseconds(inNanoseconds), |
| 15499 | m_units(units) { |
| 15500 | if (m_units == Unit::Auto) { |
| 15501 | if (m_inNanoseconds < s_nanosecondsInAMicrosecond) |
| 15502 | m_units = Unit::Nanoseconds; |
| 15503 | else if (m_inNanoseconds < s_nanosecondsInAMillisecond) |
| 15504 | m_units = Unit::Microseconds; |
| 15505 | else if (m_inNanoseconds < s_nanosecondsInASecond) |
| 15506 | m_units = Unit::Milliseconds; |
| 15507 | else if (m_inNanoseconds < s_nanosecondsInAMinute) |
| 15508 | m_units = Unit::Seconds; |
| 15509 | else |
| 15510 | m_units = Unit::Minutes; |
| 15511 | } |
| 15512 | |
| 15513 | } |
| 15514 | |
| 15515 | auto value() const -> double { |
| 15516 | switch (m_units) { |
| 15517 | case Unit::Microseconds: |
| 15518 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMicrosecond); |
| 15519 | case Unit::Milliseconds: |
| 15520 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMillisecond); |
| 15521 | case Unit::Seconds: |
| 15522 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInASecond); |
| 15523 | case Unit::Minutes: |
| 15524 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMinute); |
| 15525 | default: |
| 15526 | return static_cast<double>(m_inNanoseconds); |
| 15527 | } |
| 15528 | } |
| 15529 | auto unitsAsString() const -> std::string { |
| 15530 | switch (m_units) { |
| 15531 | case Unit::Nanoseconds: |
| 15532 | return "ns"; |
no outgoing calls
no test coverage detected