CppCommon  1.0.4.1
C++ Common Library
time.inl
Go to the documentation of this file.
1 
9 namespace CppCommon {
10 
11 template <class TOutputStream>
12 inline 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;
22  case Weekday::Tuesday:
23  stream << "Tuesday";
24  break;
25  case Weekday::Wednesday:
26  stream << "Wednesday";
27  break;
28  case Weekday::Thursday:
29  stream << "Thursday";
30  break;
31  case Weekday::Friday:
32  stream << "Friday";
33  break;
34  case Weekday::Saturday:
35  stream << "Saturday";
36  break;
37  default:
38  stream << "<unknown>";
39  break;
40  }
41  return stream;
42 }
43 
44 inline 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 
57 inline 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 
64 inline 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 
71 inline 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 
118 inline 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 
165 inline 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 
212 inline 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 
259 inline 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 
273 inline void swap(Time& time1, Time& time2) noexcept
274 {
275  time1.swap(time2);
276 }
277 
278 inline UtcTime::UtcTime(const LocalTime& time) : UtcTime(time.localstamp())
279 {}
280 
281 inline LocalTime::LocalTime(const UtcTime& time) : LocalTime(time.utcstamp())
282 {}
283 
284 } // namespace CppCommon
285 
287 template <>
288 struct 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
void swap(Time &time) noexcept
Swap two instances.
Definition: time.inl:259
UTC time.
Definition: time.h:209
UtcTime()
Initialize UTC time with a current value.
Definition: time.h:215
C++ Common project definitions.
Definition: token_bucket.h:15
std::ostream & operator<<(std::ostream &os, const uint128_t &value)
Definition: uint128.inl:155
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
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
void swap(Time &time1, Time &time2) noexcept
Definition: time.inl:273