1//
2// Timespan.h
3//
4// Library: Foundation
5// Package: DateTime
6// Module: Timespan
7//
8// Definition of the Timespan class.
9//
10// Copyright (c) 2004-2006, Applied Informatics Software Engineering GmbH.
11// and Contributors.
12//
13// SPDX-License-Identifier: BSL-1.0
14//
15
16
17#ifndef Foundation_Timespan_INCLUDED
18#define Foundation_Timespan_INCLUDED
19
20
21#include "Poco/Foundation.h"
22#include "Poco/Timestamp.h"
23
24
25namespace Poco {
26
27
28class Foundation_API Timespan
29 /// A class that represents time spans up to microsecond resolution.
30{
31public:
32 typedef Timestamp::TimeDiff TimeDiff;
33
34 Timespan();
35 /// Creates a zero Timespan.
36
37 Timespan(TimeDiff microseconds);
38 /// Creates a Timespan.
39
40 Timespan(long seconds, long microseconds);
41 /// Creates a Timespan. Useful for creating
42 /// a Timespan from a struct timeval.
43
44 Timespan(int days, int hours, int minutes, int seconds, int microSeconds);
45 /// Creates a Timespan.
46
47 Timespan(const Timespan& timespan);
48 /// Creates a Timespan from another one.
49
50 ~Timespan();
51 /// Destroys the Timespan.
52
53 Timespan& operator = (const Timespan& timespan);
54 /// Assignment operator.
55
56 Timespan& operator = (TimeDiff microseconds);
57 /// Assignment operator.
58
59 Timespan& assign(int days, int hours, int minutes, int seconds, int microSeconds);
60 /// Assigns a new span.
61
62 Timespan& assign(long seconds, long microseconds);
63 /// Assigns a new span. Useful for assigning
64 /// from a struct timeval.
65
66 void swap(Timespan& timespan);
67 /// Swaps the Timespan with another one.
68
69 bool operator == (const Timespan& ts) const;
70 bool operator != (const Timespan& ts) const;
71 bool operator > (const Timespan& ts) const;
72 bool operator >= (const Timespan& ts) const;
73 bool operator < (const Timespan& ts) const;
74 bool operator <= (const Timespan& ts) const;
75
76 bool operator == (TimeDiff microSeconds) const;
77 bool operator != (TimeDiff microSeconds) const;
78 bool operator > (TimeDiff microSeconds) const;
79 bool operator >= (TimeDiff microSeconds) const;
80 bool operator < (TimeDiff microSeconds) const;
81 bool operator <= (TimeDiff microSeconds) const;
82
83 Timespan operator + (const Timespan& d) const;
84 Timespan operator - (const Timespan& d) const;
85 Timespan& operator += (const Timespan& d);
86 Timespan& operator -= (const Timespan& d);
87
88 Timespan operator + (TimeDiff microSeconds) const;
89 Timespan operator - (TimeDiff microSeconds) const;
90 Timespan& operator += (TimeDiff microSeconds);
91 Timespan& operator -= (TimeDiff microSeconds);
92
93 int days() const;
94 /// Returns the number of days.
95
96 int hours() const;
97 /// Returns the number of hours (0 to 23).
98
99 int totalHours() const;
100 /// Returns the total number of hours.
101
102 int minutes() const;
103 /// Returns the number of minutes (0 to 59).
104
105 int totalMinutes() const;
106 /// Returns the total number of minutes.
107
108 int seconds() const;
109 /// Returns the number of seconds (0 to 59).
110
111 int totalSeconds() const;
112 /// Returns the total number of seconds.
113
114 int milliseconds() const;
115 /// Returns the number of milliseconds (0 to 999).
116
117 TimeDiff totalMilliseconds() const;
118 /// Returns the total number of milliseconds.
119
120 int microseconds() const;
121 /// Returns the fractions of a millisecond
122 /// in microseconds (0 to 999).
123
124 int useconds() const;
125 /// Returns the fractions of a second
126 /// in microseconds (0 to 999999).
127
128 TimeDiff totalMicroseconds() const;
129 /// Returns the total number of microseconds.
130
131 static const TimeDiff MILLISECONDS; /// The number of microseconds in a millisecond.
132 static const TimeDiff SECONDS; /// The number of microseconds in a second.
133 static const TimeDiff MINUTES; /// The number of microseconds in a minute.
134 static const TimeDiff HOURS; /// The number of microseconds in a hour.
135 static const TimeDiff DAYS; /// The number of microseconds in a day.
136
137private:
138 TimeDiff _span;
139};
140
141
142//
143// inlines
144//
145inline int Timespan::days() const
146{
147 return int(_span/DAYS);
148}
149
150
151inline int Timespan::hours() const
152{
153 return int((_span/HOURS) % 24);
154}
155
156
157inline int Timespan::totalHours() const
158{
159 return int(_span/HOURS);
160}
161
162
163inline int Timespan::minutes() const
164{
165 return int((_span/MINUTES) % 60);
166}
167
168
169inline int Timespan::totalMinutes() const
170{
171 return int(_span/MINUTES);
172}
173
174
175inline int Timespan::seconds() const
176{
177 return int((_span/SECONDS) % 60);
178}
179
180
181inline int Timespan::totalSeconds() const
182{
183 return int(_span/SECONDS);
184}
185
186
187inline int Timespan::milliseconds() const
188{
189 return int((_span/MILLISECONDS) % 1000);
190}
191
192
193inline Timespan::TimeDiff Timespan::totalMilliseconds() const
194{
195 return _span/MILLISECONDS;
196}
197
198
199inline int Timespan::microseconds() const
200{
201 return int(_span % 1000);
202}
203
204
205inline int Timespan::useconds() const
206{
207 return int(_span % 1000000);
208}
209
210
211inline Timespan::TimeDiff Timespan::totalMicroseconds() const
212{
213 return _span;
214}
215
216
217inline bool Timespan::operator == (const Timespan& ts) const
218{
219 return _span == ts._span;
220}
221
222
223inline bool Timespan::operator != (const Timespan& ts) const
224{
225 return _span != ts._span;
226}
227
228
229inline bool Timespan::operator > (const Timespan& ts) const
230{
231 return _span > ts._span;
232}
233
234
235inline bool Timespan::operator >= (const Timespan& ts) const
236{
237 return _span >= ts._span;
238}
239
240
241inline bool Timespan::operator < (const Timespan& ts) const
242{
243 return _span < ts._span;
244}
245
246
247inline bool Timespan::operator <= (const Timespan& ts) const
248{
249 return _span <= ts._span;
250}
251
252
253inline bool Timespan::operator == (TimeDiff microSeconds) const
254{
255 return _span == microSeconds;
256}
257
258
259inline bool Timespan::operator != (TimeDiff microSeconds) const
260{
261 return _span != microSeconds;
262}
263
264
265inline bool Timespan::operator > (TimeDiff microSeconds) const
266{
267 return _span > microSeconds;
268}
269
270
271inline bool Timespan::operator >= (TimeDiff microSeconds) const
272{
273 return _span >= microSeconds;
274}
275
276
277inline bool Timespan::operator < (TimeDiff microSeconds) const
278{
279 return _span < microSeconds;
280}
281
282
283inline bool Timespan::operator <= (TimeDiff microSeconds) const
284{
285 return _span <= microSeconds;
286}
287
288
289inline void swap(Timespan& s1, Timespan& s2)
290{
291 s1.swap(s2);
292}
293
294
295inline Timespan::~Timespan()
296{
297}
298
299
300} // namespace Poco
301
302
303#endif // Foundation_Timespan_INCLUDED
304