time_impl.h revision f546f4c27e66dc4ea868e660cebac9ba0c31fad9
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 9//! The number of nanoseconds in one millisecond. 10constexpr uint64_t kOneMicrosecondInNanoseconds(1000); 11 12namespace chre { 13 14constexpr Seconds::Seconds(uint64_t seconds) 15 : mSeconds(seconds) {} 16 17constexpr uint64_t Seconds::toRawNanoseconds() const { 18 // Perform the simple unit conversion. Warning: overflow is caught and 19 // handled by returning UINT64_MAX. A ternary expression is used because 20 // constexpr requires it. 21 return mSeconds > (UINT64_MAX / kOneSecondInNanoseconds) ? UINT64_MAX 22 : mSeconds * kOneSecondInNanoseconds; 23} 24 25constexpr Milliseconds::Milliseconds(uint64_t milliseconds) 26 : mMilliseconds(milliseconds) {} 27 28constexpr uint64_t Milliseconds::toRawNanoseconds() const { 29 // Perform the simple unit conversion. Warning: overflow is caught and 30 // handled by returning UINT64_MAX. A ternary expression is used because 31 // constexpr requires it. 32 return mMilliseconds > (UINT64_MAX / kOneMillisecondInNanoseconds) ? UINT64_MAX 33 : mMilliseconds * kOneMillisecondInNanoseconds; 34} 35 36constexpr Microseconds::Microseconds(uint64_t microseconds) 37 : mMicroseconds(microseconds) {} 38 39constexpr Microseconds::Microseconds(Nanoseconds nanoseconds) 40 : mMicroseconds( 41 nanoseconds.toRawNanoseconds() / kOneMicrosecondInNanoseconds) {} 42 43constexpr uint64_t Microseconds::toRawNanoseconds() const { 44 // Perform the simple unit conversion. Warning: overflow is caught and 45 // handled by returning UINT64_MAX. A ternary expression is used because 46 // constexpr requires it. 47 return mMicroseconds > (UINT64_MAX / kOneMicrosecondInNanoseconds) ? UINT64_MAX 48 : mMicroseconds * kOneMicrosecondInNanoseconds; 49} 50 51constexpr uint64_t Microseconds::getMicroseconds() const { 52 return mMicroseconds; 53} 54 55constexpr Nanoseconds::Nanoseconds() 56 : mNanoseconds(0) {} 57 58constexpr Nanoseconds::Nanoseconds(uint64_t nanoseconds) 59 : mNanoseconds(nanoseconds) {} 60 61constexpr Nanoseconds::Nanoseconds(Milliseconds milliseconds) 62 : mNanoseconds(milliseconds.toRawNanoseconds()) {} 63 64constexpr Nanoseconds::Nanoseconds(Microseconds microseconds) 65 : mNanoseconds(microseconds.toRawNanoseconds()) {} 66 67constexpr uint64_t Nanoseconds::toRawNanoseconds() const { 68 return mNanoseconds; 69} 70 71constexpr bool Nanoseconds::operator==(const Nanoseconds& nanos) const { 72 return (mNanoseconds == nanos.mNanoseconds); 73} 74 75constexpr Nanoseconds operator+(const Seconds& secs, 76 const Nanoseconds& nanos) { 77 return Nanoseconds(secs.toRawNanoseconds() + nanos.toRawNanoseconds()); 78} 79 80constexpr Nanoseconds operator+(const Nanoseconds& nanos_a, 81 const Nanoseconds& nanos_b) { 82 return Nanoseconds(nanos_a.toRawNanoseconds() + nanos_b.toRawNanoseconds()); 83} 84 85constexpr Nanoseconds operator-(const Nanoseconds& nanos_a, 86 const Nanoseconds& nanos_b) { 87 return Nanoseconds(nanos_a.toRawNanoseconds() - nanos_b.toRawNanoseconds()); 88} 89 90constexpr bool operator>=(const Nanoseconds& nanos_a, 91 const Nanoseconds& nanos_b) { 92 return nanos_a.toRawNanoseconds() >= nanos_b.toRawNanoseconds(); 93} 94 95constexpr bool operator<(const Nanoseconds& nanos_a, 96 const Nanoseconds& nanos_b) { 97 return nanos_a.toRawNanoseconds() < nanos_b.toRawNanoseconds(); 98} 99 100constexpr bool operator>(const Nanoseconds& nanos_a, 101 const Nanoseconds& nanos_b) { 102 return nanos_a.toRawNanoseconds() > nanos_b.toRawNanoseconds(); 103} 104 105} // namespace chre 106