time_impl.h revision 725bef45ca127971b3ea798cd1f4e4b2c0d8fe9d
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() 34 : mNanoseconds(0) {} 35 36constexpr Nanoseconds::Nanoseconds(uint64_t nanoseconds) 37 : mNanoseconds(nanoseconds) {} 38 39constexpr Nanoseconds::Nanoseconds(Milliseconds milliseconds) 40 : mNanoseconds(milliseconds.toRawNanoseconds()) {} 41 42constexpr uint64_t Nanoseconds::toRawNanoseconds() const { 43 return mNanoseconds; 44} 45 46constexpr Nanoseconds operator+(const Seconds& secs, 47 const Nanoseconds& nanos) { 48 return Nanoseconds(secs.toRawNanoseconds() + nanos.toRawNanoseconds()); 49} 50 51constexpr Nanoseconds operator+(const Nanoseconds& nanos_a, 52 const Nanoseconds& nanos_b) { 53 return Nanoseconds(nanos_a.toRawNanoseconds() + nanos_b.toRawNanoseconds()); 54} 55 56constexpr Nanoseconds operator-(const Nanoseconds& nanos_a, 57 const Nanoseconds& nanos_b) { 58 return Nanoseconds(nanos_a.toRawNanoseconds() - nanos_b.toRawNanoseconds()); 59} 60 61constexpr bool operator>=(const Nanoseconds& nanos_a, 62 const Nanoseconds& nanos_b) { 63 return nanos_a.toRawNanoseconds() >= nanos_b.toRawNanoseconds(); 64} 65 66constexpr bool operator<(const Nanoseconds& nanos_a, 67 const Nanoseconds& nanos_b) { 68 return nanos_a.toRawNanoseconds() < nanos_b.toRawNanoseconds(); 69} 70 71constexpr bool operator>(const Nanoseconds& nanos_a, 72 const Nanoseconds& nanos_b) { 73 return nanos_a.toRawNanoseconds() > nanos_b.toRawNanoseconds(); 74} 75 76} // namespace chre 77