Index: webrtc/system_wrappers/include/ntp_time.h |
diff --git a/webrtc/system_wrappers/include/ntp_time.h b/webrtc/system_wrappers/include/ntp_time.h |
index ecb303ae18f89a7063e9ae4b140eef67c7330a45..5e53064b46a7913c200568e3f4cc719857a32723 100644 |
--- a/webrtc/system_wrappers/include/ntp_time.h |
+++ b/webrtc/system_wrappers/include/ntp_time.h |
@@ -16,41 +16,39 @@ namespace webrtc { |
class NtpTime { |
public: |
- NtpTime() : seconds_(0), fractions_(0) {} |
+ static constexpr uint64_t kFractionsPerSecond = 0x100000000; |
+ NtpTime() : value_(0) {} |
+ explicit NtpTime(uint64_t value) : value_(value) {} |
NtpTime(uint32_t seconds, uint32_t fractions) |
- : seconds_(seconds), fractions_(fractions) {} |
+ : value_(seconds * kFractionsPerSecond + fractions) {} |
NtpTime(const NtpTime&) = default; |
NtpTime& operator=(const NtpTime&) = default; |
+ explicit operator uint64_t() const { return value_; } |
void Set(uint32_t seconds, uint32_t fractions) { |
- seconds_ = seconds; |
- fractions_ = fractions; |
- } |
- void Reset() { |
- seconds_ = 0; |
- fractions_ = 0; |
+ value_ = seconds * kFractionsPerSecond + fractions; |
} |
+ void Reset() { value_ = 0; } |
int64_t ToMs() const { |
static constexpr double kNtpFracPerMs = 4.294967296E6; // 2^32 / 1000. |
- const double frac_ms = static_cast<double>(fractions_) / kNtpFracPerMs; |
- return 1000 * static_cast<int64_t>(seconds_) + |
+ const double frac_ms = static_cast<double>(fractions()) / kNtpFracPerMs; |
+ return 1000 * static_cast<int64_t>(seconds()) + |
static_cast<int64_t>(frac_ms + 0.5); |
} |
- // NTP standard (RFC1305, section 3.1) explicitly state value 0/0 is invalid. |
- bool Valid() const { return !(seconds_ == 0 && fractions_ == 0); } |
+ // NTP standard (RFC1305, section 3.1) explicitly state value 0 is invalid. |
+ bool Valid() const { return value_ != 0; } |
- uint32_t seconds() const { return seconds_; } |
- uint32_t fractions() const { return fractions_; } |
+ uint32_t seconds() const { return value_ / kFractionsPerSecond; } |
+ uint32_t fractions() const { return value_ % kFractionsPerSecond; } |
private: |
- uint32_t seconds_; |
- uint32_t fractions_; |
+ uint64_t value_; |
}; |
inline bool operator==(const NtpTime& n1, const NtpTime& n2) { |
- return n1.seconds() == n2.seconds() && n1.fractions() == n2.fractions(); |
+ return static_cast<uint64_t>(n1) == static_cast<uint64_t>(n2); |
} |
inline bool operator!=(const NtpTime& n1, const NtpTime& n2) { |
return !(n1 == n2); |