| 9623 | struct OutputFlush {}; |
| 9624 | |
| 9625 | class Duration { |
| 9626 | enum class Unit : uint8_t { |
| 9627 | Auto, |
| 9628 | Nanoseconds, |
| 9629 | Microseconds, |
| 9630 | Milliseconds, |
| 9631 | Seconds, |
| 9632 | Minutes |
| 9633 | }; |
| 9634 | static const uint64_t s_nanosecondsInAMicrosecond = 1000; |
| 9635 | static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond; |
| 9636 | static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond; |
| 9637 | static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond; |
| 9638 | |
| 9639 | double m_inNanoseconds; |
| 9640 | Unit m_units; |
| 9641 | |
| 9642 | public: |
| 9643 | explicit Duration(double inNanoseconds, Unit units = Unit::Auto) |
| 9644 | : m_inNanoseconds(inNanoseconds), |
| 9645 | m_units(units) { |
| 9646 | if (m_units == Unit::Auto) { |
| 9647 | if (m_inNanoseconds < s_nanosecondsInAMicrosecond) |
| 9648 | m_units = Unit::Nanoseconds; |
| 9649 | else if (m_inNanoseconds < s_nanosecondsInAMillisecond) |
| 9650 | m_units = Unit::Microseconds; |
| 9651 | else if (m_inNanoseconds < s_nanosecondsInASecond) |
| 9652 | m_units = Unit::Milliseconds; |
| 9653 | else if (m_inNanoseconds < s_nanosecondsInAMinute) |
| 9654 | m_units = Unit::Seconds; |
| 9655 | else |
| 9656 | m_units = Unit::Minutes; |
| 9657 | } |
| 9658 | |
| 9659 | } |
| 9660 | |
| 9661 | auto value() const -> double { |
| 9662 | switch (m_units) { |
| 9663 | case Unit::Microseconds: |
| 9664 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMicrosecond); |
| 9665 | case Unit::Milliseconds: |
| 9666 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMillisecond); |
| 9667 | case Unit::Seconds: |
| 9668 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInASecond); |
| 9669 | case Unit::Minutes: |
| 9670 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMinute); |
| 9671 | default: |
| 9672 | return m_inNanoseconds; |
| 9673 | } |
| 9674 | } |
| 9675 | StringRef unitsAsString() const { |
| 9676 | switch (m_units) { |
| 9677 | case Unit::Nanoseconds: |
| 9678 | return "ns"_sr; |
| 9679 | case Unit::Microseconds: |
| 9680 | return "us"_sr; |
| 9681 | case Unit::Milliseconds: |
| 9682 | return "ms"_sr; |
no outgoing calls
no test coverage detected