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