| 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);
|
|
|