1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
|
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// QuicTime represents one point in time, stored in microsecond resolution.
// This class wrapps the classes DateTimeO and DateTimeOffset.
#ifndef NET_QUIC_QUIC_TIME_H_
#define NET_QUIC_QUIC_TIME_H_
#include "base/basictypes.h"
#include "base/time.h"
#include "net/base/net_export.h"
namespace net {
class NET_EXPORT_PRIVATE QuicTime {
public:
// A QuicTime::Delta represents the signed difference between two points in
// time, stored in microsecond resolution.
class NET_EXPORT_PRIVATE Delta {
public:
// Default constructor initiates to 0.
Delta();
explicit Delta(base::TimeDelta delta);
// Create a object with infinite offset time.
static Delta Infinite();
// Converts a number of milliseconds to a time offset.
static Delta FromMilliseconds(int64 ms);
// Converts a number of microseconds to a time offset.
static Delta FromMicroseconds(int64 us);
// Converts the time offset to a rounded number of milliseconds.
int64 ToMilliseconds() const;
// Converts the time offset to a rounded number of microseconds.
int64 ToMicroseconds() const;
Delta Add(const Delta& delta) const;
Delta Subtract(const Delta& delta) const;
bool IsZero() const;
bool IsInfinite() const;
private:
base::TimeDelta delta_;
friend class QuicTime;
};
// Default constructor initiates to 0.
QuicTime();
explicit QuicTime(base::TimeTicks ticks);
// Create a new QuicTime holding the time_ms.
static QuicTime FromMilliseconds(int64 time_ms);
// Create a new QuicTime holding the time_us.
static QuicTime FromMicroseconds(int64 time_us);
int64 ToMilliseconds() const;
int64 ToMicroseconds() const;
bool IsInitialized() const;
QuicTime Add(const Delta& delta) const;
QuicTime Subtract(const Delta& delta) const;
Delta Subtract(const QuicTime& other) const;
private:
base::TimeTicks ticks_;
friend class QuicClock;
friend class QuicClockTest;
};
// Non-member relational operators for QuicTime::Delta.
inline bool operator==(QuicTime::Delta lhs, QuicTime::Delta rhs) {
return lhs.ToMicroseconds() == rhs.ToMicroseconds();
}
inline bool operator!=(QuicTime::Delta lhs, QuicTime::Delta rhs) {
return !(lhs == rhs);
}
inline bool operator<(QuicTime::Delta lhs, QuicTime::Delta rhs) {
return lhs.ToMicroseconds() < rhs.ToMicroseconds();
}
inline bool operator>(QuicTime::Delta lhs, QuicTime::Delta rhs) {
return rhs < lhs;
}
inline bool operator<=(QuicTime::Delta lhs, QuicTime::Delta rhs) {
return !(rhs < lhs);
}
inline bool operator>=(QuicTime::Delta lhs, QuicTime::Delta rhs) {
return !(lhs < rhs);
}
// Non-member relational operators for QuicTime.
inline bool operator==(QuicTime lhs, QuicTime rhs) {
return lhs.ToMicroseconds() == rhs.ToMicroseconds();
}
inline bool operator!=(QuicTime lhs, QuicTime rhs) {
return !(lhs == rhs);
}
inline bool operator<(QuicTime lhs, QuicTime rhs) {
return lhs.ToMicroseconds() < rhs.ToMicroseconds();
}
inline bool operator>(QuicTime lhs, QuicTime rhs) {
return rhs < lhs;
}
inline bool operator<=(QuicTime lhs, QuicTime rhs) {
return !(rhs < lhs);
}
inline bool operator>=(QuicTime lhs, QuicTime rhs) {
return !(lhs < rhs);
}
} // namespace net
#endif // NET_QUIC_QUIC_TIME_H_
|