CppCommon 1.0.5.0
C++ Common Library
Loading...
Searching...
No Matches
time.inl
Go to the documentation of this file.
1
9namespace CppCommon {
10
11template <class TOutputStream>
12inline TOutputStream& operator<<(TOutputStream& stream, Weekday weekday)
13{
14 switch (weekday)
15 {
16 case Weekday::Sunday:
17 stream << "Sunday";
18 break;
19 case Weekday::Monday:
20 stream << "Monday";
21 break;
23 stream << "Tuesday";
24 break;
26 stream << "Wednesday";
27 break;
29 stream << "Thursday";
30 break;
31 case Weekday::Friday:
32 stream << "Friday";
33 break;
35 stream << "Saturday";
36 break;
37 default:
38 stream << "<unknown>";
39 break;
40 }
41 return stream;
42}
43
44inline Time::Time() noexcept
45 : _year(1970),
46 _month(1),
47 _day(1),
48 _hour(0),
49 _minute(0),
50 _second(0),
51 _millisecond(0),
52 _microsecond(0),
53 _nanosecond(0)
54{
55}
56
57inline bool operator==(const Time& time1, const Time& time2) noexcept
58{
59 return ((time1._year == time2._year) && (time1._month == time2._month) && (time1._day == time2._day) &&
60 (time1._hour == time2._hour) && (time1._minute == time2._minute) && (time1._second == time2._second) &&
61 (time1._millisecond == time2._millisecond) && (time1._microsecond == time2._microsecond) && (time1._nanosecond == time2._nanosecond));
62}
63
64inline bool operator!=(const Time& time1, const Time& time2) noexcept
65{
66 return ((time1._year != time2._year) || (time1._month != time2._month) || (time1._day != time2._day) ||
67 (time1._hour != time2._hour) || (time1._minute != time2._minute) || (time1._second != time2._second) ||
68 (time1._millisecond != time2._millisecond) || (time1._microsecond != time2._microsecond) || (time1._nanosecond != time2._nanosecond));
69}
70
71inline bool operator>(const Time& time1, const Time& time2) noexcept
72{
73 if (time1._year < time2._year)
74 return false;
75 else if (time1._year == time2._year)
76 {
77 if (time1._month < time2._month)
78 return false;
79 else if (time1._month == time2._month)
80 {
81 if (time1._day < time2._day)
82 return false;
83 else if (time1._day == time2._day)
84 {
85 if (time1._hour < time2._hour)
86 return false;
87 else if (time1._hour == time2._hour)
88 {
89 if (time1._minute < time2._minute)
90 return false;
91 else if (time1._minute == time2._minute)
92 {
93 if (time1._second < time2._second)
94 return false;
95 else if (time1._second == time2._second)
96 {
97 if (time1._millisecond < time2._millisecond)
98 return false;
99 else if (time1._millisecond == time2._millisecond)
100 {
101 if (time1._microsecond < time2._microsecond)
102 return false;
103 else if (time1._microsecond == time2._microsecond)
104 {
105 if (time1._nanosecond <= time2._nanosecond)
106 return false;
107 }
108 }
109 }
110 }
111 }
112 }
113 }
114 }
115 return true;
116}
117
118inline bool operator<(const Time& time1, const Time& time2) noexcept
119{
120 if (time1._year > time2._year)
121 return false;
122 else if (time1._year == time2._year)
123 {
124 if (time1._month > time2._month)
125 return false;
126 else if (time1._month == time2._month)
127 {
128 if (time1._day > time2._day)
129 return false;
130 else if (time1._day == time2._day)
131 {
132 if (time1._hour > time2._hour)
133 return false;
134 else if (time1._hour == time2._hour)
135 {
136 if (time1._minute > time2._minute)
137 return false;
138 else if (time1._minute == time2._minute)
139 {
140 if (time1._second > time2._second)
141 return false;
142 else if (time1._second == time2._second)
143 {
144 if (time1._millisecond > time2._millisecond)
145 return false;
146 else if (time1._millisecond == time2._millisecond)
147 {
148 if (time1._microsecond > time2._microsecond)
149 return false;
150 else if (time1._microsecond == time2._microsecond)
151 {
152 if (time1._nanosecond >= time2._nanosecond)
153 return false;
154 }
155 }
156 }
157 }
158 }
159 }
160 }
161 }
162 return true;
163}
164
165inline bool operator>=(const Time& time1, const Time& time2) noexcept
166{
167 if (time1._year < time2._year)
168 return false;
169 else if (time1._year == time2._year)
170 {
171 if (time1._month < time2._month)
172 return false;
173 else if (time1._month == time2._month)
174 {
175 if (time1._day < time2._day)
176 return false;
177 else if (time1._day == time2._day)
178 {
179 if (time1._hour < time2._hour)
180 return false;
181 else if (time1._hour == time2._hour)
182 {
183 if (time1._minute < time2._minute)
184 return false;
185 else if (time1._minute == time2._minute)
186 {
187 if (time1._second < time2._second)
188 return false;
189 else if (time1._second == time2._second)
190 {
191 if (time1._millisecond < time2._millisecond)
192 return false;
193 else if (time1._millisecond == time2._millisecond)
194 {
195 if (time1._microsecond < time2._microsecond)
196 return false;
197 else if (time1._microsecond == time2._microsecond)
198 {
199 if (time1._nanosecond < time2._nanosecond)
200 return false;
201 }
202 }
203 }
204 }
205 }
206 }
207 }
208 }
209 return true;
210}
211
212inline bool operator<=(const Time& time1, const Time& time2) noexcept
213{
214 if (time1._year > time2._year)
215 return false;
216 else if (time1._year == time2._year)
217 {
218 if (time1._month > time2._month)
219 return false;
220 else if (time1._month == time2._month)
221 {
222 if (time1._day > time2._day)
223 return false;
224 else if (time1._day == time2._day)
225 {
226 if (time1._hour > time2._hour)
227 return false;
228 else if (time1._hour == time2._hour)
229 {
230 if (time1._minute > time2._minute)
231 return false;
232 else if (time1._minute == time2._minute)
233 {
234 if (time1._second > time2._second)
235 return false;
236 else if (time1._second == time2._second)
237 {
238 if (time1._millisecond > time2._millisecond)
239 return false;
240 else if (time1._millisecond == time2._millisecond)
241 {
242 if (time1._microsecond > time2._microsecond)
243 return false;
244 else if (time1._microsecond == time2._microsecond)
245 {
246 if (time1._nanosecond > time2._nanosecond)
247 return false;
248 }
249 }
250 }
251 }
252 }
253 }
254 }
255 }
256 return true;
257}
258
259inline void Time::swap(Time& time) noexcept
260{
261 using std::swap;
262 swap(_year, time._year);
263 swap(_month, time._month);
264 swap(_day, time._day);
265 swap(_hour, time._hour);
266 swap(_minute, time._minute);
267 swap(_second, time._second);
268 swap(_millisecond, time._millisecond);
269 swap(_microsecond, time._microsecond);
270 swap(_nanosecond, time._nanosecond);
271}
272
273inline void swap(Time& time1, Time& time2) noexcept
274{
275 time1.swap(time2);
276}
277
278inline UtcTime::UtcTime(const LocalTime& time) : UtcTime(time.localstamp())
279{}
280
281inline LocalTime::LocalTime(const UtcTime& time) : LocalTime(time.utcstamp())
282{}
283
284} // namespace CppCommon
285
287template <>
288struct std::hash<CppCommon::Time>
289{
290 typedef CppCommon::Time argument_type;
291 typedef size_t result_type;
292
293 result_type operator() (const argument_type& value) const
294 {
295 result_type result = 17;
296 std::hash<int> hasher;
297 result = result * 31 + hasher(value.year());
298 result = result * 31 + hasher(value.month());
299 result = result * 31 + hasher(value.day());
300 result = result * 31 + hasher(value.hour());
301 result = result * 31 + hasher(value.minute());
302 result = result * 31 + hasher(value.second());
303 result = result * 31 + hasher(value.millisecond());
304 result = result * 31 + hasher(value.microsecond());
305 result = result * 31 + hasher(value.nanosecond());
306 return result;
307 }
308};
Local time.
Definition time.h:235
LocalTime()
Initialize local time with a current value.
Definition time.h:241
Time.
Definition time.h:48
Time() noexcept
Initialize time with an epoch time.
Definition time.inl:44
friend void swap(Time &time1, Time &time2) noexcept
Definition time.inl:273
UTC time.
Definition time.h:209
UtcTime()
Initialize UTC time with a current value.
Definition time.h:215
C++ Common project definitions.
bool operator==(const uint128_t &value1, const uint128_t &value2) noexcept
Definition uint128.inl:115
bool operator!=(const uint128_t &value1, const uint128_t &value2) noexcept
Definition uint128.inl:120
std::ostream & operator<<(std::ostream &os, const uint128_t &value)
Definition uint128.inl:155
Weekday
Weekday.
Definition time.h:18
void swap(FileCache &cache1, FileCache &cache2) noexcept
Definition filecache.inl:23
bool operator<(const uint128_t &value1, const uint128_t &value2) noexcept
Definition uint128.inl:125
bool operator>(const uint128_t &value1, const uint128_t &value2) noexcept
Definition uint128.inl:130
bool operator<=(const uint128_t &value1, const uint128_t &value2) noexcept
Definition uint128.inl:135
bool operator>=(const uint128_t &value1, const uint128_t &value2) noexcept
Definition uint128.inl:140