time_impl.h revision b2ddcf26fc919cb8024ab0536db8362bcb77dfd5
1/* 2 * Copyright (C) 2017 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#ifndef CHRE_UTIL_TIME_IMPL_H_ 18#define CHRE_UTIL_TIME_IMPL_H_ 19 20#include "chre/util/time.h" 21 22namespace chre { 23 24constexpr Seconds::Seconds(uint64_t seconds) 25 : mSeconds(seconds) {} 26 27constexpr uint64_t Seconds::toRawNanoseconds() const { 28 // Perform the simple unit conversion. Warning: overflow is caught and 29 // handled by returning UINT64_MAX. A ternary expression is used because 30 // constexpr requires it. 31 return mSeconds > (UINT64_MAX / kOneSecondInNanoseconds) ? UINT64_MAX 32 : mSeconds * kOneSecondInNanoseconds; 33} 34 35constexpr Milliseconds::Milliseconds() 36 : mMilliseconds(0) {} 37 38constexpr Milliseconds::Milliseconds(uint64_t milliseconds) 39 : mMilliseconds(milliseconds) {} 40 41constexpr Milliseconds::Milliseconds(Nanoseconds nanoseconds) 42 : mMilliseconds( 43 nanoseconds.toRawNanoseconds() / kOneMillisecondInNanoseconds) {} 44 45constexpr uint64_t Milliseconds::toRawNanoseconds() const { 46 // Perform the simple unit conversion. Warning: overflow is caught and 47 // handled by returning UINT64_MAX. A ternary expression is used because 48 // constexpr requires it. 49 return mMilliseconds > (UINT64_MAX / kOneMillisecondInNanoseconds) ? UINT64_MAX 50 : mMilliseconds * kOneMillisecondInNanoseconds; 51} 52 53constexpr uint64_t Milliseconds::getMilliseconds() const { 54 return mMilliseconds; 55} 56 57constexpr bool Milliseconds::operator==(const Milliseconds& millis) const { 58 return (mMilliseconds == millis.mMilliseconds); 59} 60 61constexpr Microseconds::Microseconds(uint64_t microseconds) 62 : mMicroseconds(microseconds) {} 63 64constexpr Microseconds::Microseconds(Nanoseconds nanoseconds) 65 : mMicroseconds( 66 nanoseconds.toRawNanoseconds() / kOneMicrosecondInNanoseconds) {} 67 68constexpr uint64_t Microseconds::toRawNanoseconds() const { 69 // Perform the simple unit conversion. Warning: overflow is caught and 70 // handled by returning UINT64_MAX. A ternary expression is used because 71 // constexpr requires it. 72 return mMicroseconds > (UINT64_MAX / kOneMicrosecondInNanoseconds) ? UINT64_MAX 73 : mMicroseconds * kOneMicrosecondInNanoseconds; 74} 75 76constexpr uint64_t Microseconds::getMicroseconds() const { 77 return mMicroseconds; 78} 79 80constexpr Nanoseconds::Nanoseconds() 81 : mNanoseconds(0) {} 82 83constexpr Nanoseconds::Nanoseconds(uint64_t nanoseconds) 84 : mNanoseconds(nanoseconds) {} 85 86constexpr Nanoseconds::Nanoseconds(Seconds seconds) 87 : mNanoseconds(seconds.toRawNanoseconds()) {} 88 89constexpr Nanoseconds::Nanoseconds(Milliseconds milliseconds) 90 : mNanoseconds(milliseconds.toRawNanoseconds()) {} 91 92constexpr Nanoseconds::Nanoseconds(Microseconds microseconds) 93 : mNanoseconds(microseconds.toRawNanoseconds()) {} 94 95constexpr uint64_t Nanoseconds::toRawNanoseconds() const { 96 return mNanoseconds; 97} 98 99constexpr bool Nanoseconds::operator==(const Nanoseconds& nanos) const { 100 return (mNanoseconds == nanos.mNanoseconds); 101} 102 103constexpr bool Nanoseconds::operator!=(const Nanoseconds& nanos) const { 104 return !(mNanoseconds == nanos.mNanoseconds); 105} 106 107constexpr Nanoseconds operator+(const Seconds& secs, const Nanoseconds& nanos) { 108 return Nanoseconds(secs.toRawNanoseconds() + nanos.toRawNanoseconds()); 109} 110 111constexpr Nanoseconds operator+(const Nanoseconds& nanos_a, 112 const Nanoseconds& nanos_b) { 113 return Nanoseconds(nanos_a.toRawNanoseconds() + nanos_b.toRawNanoseconds()); 114} 115 116constexpr Nanoseconds operator-(const Nanoseconds& nanos_a, 117 const Nanoseconds& nanos_b) { 118 return Nanoseconds(nanos_a.toRawNanoseconds() - nanos_b.toRawNanoseconds()); 119} 120 121constexpr bool operator>=(const Nanoseconds& nanos_a, 122 const Nanoseconds& nanos_b) { 123 return nanos_a.toRawNanoseconds() >= nanos_b.toRawNanoseconds(); 124} 125 126constexpr bool operator<(const Nanoseconds& nanos_a, 127 const Nanoseconds& nanos_b) { 128 return nanos_a.toRawNanoseconds() < nanos_b.toRawNanoseconds(); 129} 130 131constexpr bool operator>(const Nanoseconds& nanos_a, 132 const Nanoseconds& nanos_b) { 133 return nanos_a.toRawNanoseconds() > nanos_b.toRawNanoseconds(); 134} 135 136} // namespace chre 137 138#endif // CHRE_UTIL_TIME_IMPL_H_ 139