Agora Java API Reference for Android

time_utils.h
1 //
2 // Agora Media SDK
3 //
4 // Copyright (c) 2021 Agora IO. All rights reserved.
5 //
6
7 #pragma once
8 #include <stdint.h>
9
10 namespace agora {
11 namespace base {
12
13 class NtpTime {
14 public:
15 static const uint64_t ntpFracPerSecond = 4294967296;
16
17 NtpTime() : ms_(0) {}
18
19 NtpTime(uint64_t ms) : ms_(ms) {}
20
21 NtpTime(uint32_t seconds, uint32_t fractions) {
22 const double fracMs = fractions * 1000.0 / static_cast<double>(ntpFracPerSecond);
23 ms_ = static_cast<uint64_t>(seconds) * 1000 + static_cast<uint64_t>(0.5 + fracMs);
24 }
25
26 operator uint64_t() const { return ms_; }
27
33 uint64_t Ms() const {
34 return ms_;
35 }
36
42 bool Valid() const { return ms_ != 0; }
43
49 uint32_t ToSeconds() const {
50 return static_cast<uint32_t>(ms_ / 1000);
51 }
52
58 uint32_t ToFractions() const {
59 return static_cast<uint32_t>((ms_ % 1000) * static_cast<double>(ntpFracPerSecond) / 1000.0);
60 }
61
70 uint64_t ToTimestamp() const {
71 return ToSeconds() * ntpFracPerSecond + ToFractions();
72 }
73
74 private:
75 uint64_t ms_;
76 };
77
78 inline bool operator==(const NtpTime& n1, const NtpTime& n2) {
79 return static_cast<uint64_t>(n1) == static_cast<uint64_t>(n2);
80 }
81
82 inline bool operator!=(const NtpTime& n1, const NtpTime& n2) { return !(n1 == n2); }
83
84 } // namespace base
85 } // namespace agora
agora::base::NtpTime
Definition: time_utils.h:13
agora::base::NtpTime::Valid
bool Valid() const
Definition: time_utils.h:42
agora::base::NtpTime::ToFractions
uint32_t ToFractions() const
Definition: time_utils.h:58
agora::base::NtpTime::ToTimestamp
uint64_t ToTimestamp() const
Definition: time_utils.h:70
agora::base::NtpTime::ToSeconds
uint32_t ToSeconds() const
Definition: time_utils.h:49
agora::base::NtpTime::Ms
uint64_t Ms() const
Definition: time_utils.h:33