| 13261 | struct RowBreak {}; |
| 13262 | |
| 13263 | class Duration { |
| 13264 | enum class Unit { |
| 13265 | Auto, |
| 13266 | Nanoseconds, |
| 13267 | Microseconds, |
| 13268 | Milliseconds, |
| 13269 | Seconds, |
| 13270 | Minutes |
| 13271 | }; |
| 13272 | static const uint64_t s_nanosecondsInAMicrosecond = 1000; |
| 13273 | static const uint64_t s_nanosecondsInAMillisecond = 1000 * s_nanosecondsInAMicrosecond; |
| 13274 | static const uint64_t s_nanosecondsInASecond = 1000 * s_nanosecondsInAMillisecond; |
| 13275 | static const uint64_t s_nanosecondsInAMinute = 60 * s_nanosecondsInASecond; |
| 13276 | |
| 13277 | uint64_t m_inNanoseconds; |
| 13278 | Unit m_units; |
| 13279 | |
| 13280 | public: |
| 13281 | explicit Duration(uint64_t inNanoseconds, Unit units = Unit::Auto) |
| 13282 | : m_inNanoseconds(inNanoseconds), |
| 13283 | m_units(units) { |
| 13284 | if (m_units == Unit::Auto) { |
| 13285 | if (m_inNanoseconds < s_nanosecondsInAMicrosecond) |
| 13286 | m_units = Unit::Nanoseconds; |
| 13287 | else if (m_inNanoseconds < s_nanosecondsInAMillisecond) |
| 13288 | m_units = Unit::Microseconds; |
| 13289 | else if (m_inNanoseconds < s_nanosecondsInASecond) |
| 13290 | m_units = Unit::Milliseconds; |
| 13291 | else if (m_inNanoseconds < s_nanosecondsInAMinute) |
| 13292 | m_units = Unit::Seconds; |
| 13293 | else |
| 13294 | m_units = Unit::Minutes; |
| 13295 | } |
| 13296 | |
| 13297 | } |
| 13298 | |
| 13299 | auto value() const -> double { |
| 13300 | switch (m_units) { |
| 13301 | case Unit::Microseconds: |
| 13302 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMicrosecond); |
| 13303 | case Unit::Milliseconds: |
| 13304 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMillisecond); |
| 13305 | case Unit::Seconds: |
| 13306 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInASecond); |
| 13307 | case Unit::Minutes: |
| 13308 | return m_inNanoseconds / static_cast<double>(s_nanosecondsInAMinute); |
| 13309 | default: |
| 13310 | return static_cast<double>(m_inNanoseconds); |
| 13311 | } |
| 13312 | } |
| 13313 | auto unitsAsString() const -> std::string { |
| 13314 | switch (m_units) { |
| 13315 | case Unit::Nanoseconds: |
| 13316 | return "ns"; |
| 13317 | case Unit::Microseconds: |
| 13318 | return "µs"; |
| 13319 | case Unit::Milliseconds: |
| 13320 | return "ms"; |
nothing calls this directly
no outgoing calls
no test coverage detected