time_impl.h revision e64f180233e64c40b56993cfea3696c5b4b16395
1#include "chre/util/time.h" 2 3//! The number of nanoseconds in one second. 4constexpr uint64_t kOneSecondInNanoseconds(1000000000); 5 6//! The number of nanoseconds in one millisecond. 7constexpr uint64_t kOneMillisecondInNanoseconds(1000000); 8 9namespace chre { 10 11constexpr Seconds::Seconds(uint64_t seconds) 12 : mSeconds(seconds) {} 13 14constexpr uint64_t Seconds::toRawNanoseconds() const { 15 // Perform the simple unit conversion. Warning: overflow is caught and 16 // handled by returning UINT64_MAX. A ternary expression is used because 17 // constexpr requires it. 18 return mSeconds > (UINT64_MAX / kOneSecondInNanoseconds) ? UINT64_MAX 19 : mSeconds * kOneSecondInNanoseconds; 20} 21 22constexpr Milliseconds::Milliseconds(uint64_t milliseconds) 23 : mMilliseconds(milliseconds) {} 24 25constexpr uint64_t Milliseconds::toRawNanoseconds() const { 26 // Perform the simple unit conversion. Warning: overflow is caught and 27 // handled by returning UINT64_MAX. A ternary expression is used because 28 // constexpr requires it. 29 return mMilliseconds > (UINT64_MAX / kOneMillisecondInNanoseconds) ? UINT64_MAX 30 : mMilliseconds * kOneMillisecondInNanoseconds; 31} 32 33constexpr Nanoseconds::Nanoseconds(uint64_t nanoseconds) 34 : mNanoseconds(nanoseconds) {} 35 36constexpr uint64_t Nanoseconds::toRawNanoseconds() const { 37 return mNanoseconds; 38} 39 40constexpr Nanoseconds operator+(const Seconds& secs, 41 const Nanoseconds& nanos) { 42 return Nanoseconds(secs.toRawNanoseconds() + nanos.toRawNanoseconds()); 43} 44 45constexpr Nanoseconds operator-(const Nanoseconds& nanos_a, 46 const Nanoseconds& nanos_b) { 47 return Nanoseconds(nanos_a.toRawNanoseconds() - nanos_b.toRawNanoseconds()); 48} 49 50} // namespace chre 51