6
6
7
7
#pragma once
8
8
9
- #include < string>
10
9
#include < cstring>
11
- #include < iostream>
12
10
#include < ctime>
13
- #include < tuple>
11
+ #include < iostream>
12
+ #include < optional>
13
+ #include < string>
14
14
15
15
namespace Fixpp
16
16
{
@@ -124,69 +124,37 @@ namespace Fixpp
124
124
125
125
struct UTCTimestamp
126
126
{
127
- struct Tm
127
+ struct Time
128
128
{
129
- Tm (int msec = 0 , int usec = 0 )
130
- : m_msec(msec)
131
- , m_usec(usec)
129
+ Time ()
130
+ : m_time(std::time(nullptr ))
132
131
{ }
133
132
134
- Tm ( const std::tm& tm, int msec = 0 , int usec = 0 )
135
- : m_tm(tm )
133
+ Time ( std::time_t time, std::optional< int > msec = {}, std::optional< int > usec = {} )
134
+ : m_time(time )
136
135
, m_msec(msec)
137
136
, m_usec(usec)
138
137
{ }
139
138
140
- std::tm tm () const
139
+ std::time_t time () const
141
140
{
142
- return m_tm ;
141
+ return m_time ;
143
142
}
144
143
145
- int msec () const
144
+ std::optional< int > msec () const
146
145
{
147
146
return m_msec;
148
147
}
149
148
150
- int usec () const
149
+ std::optional< int > usec () const
151
150
{
152
151
return m_usec;
153
152
}
154
-
155
- private:
156
- std::tm m_tm{};
157
- int m_msec{};
158
- int m_usec;
159
- };
160
-
161
- struct Time
162
- {
163
- Time ()
164
- : m_time(std::time(nullptr ))
165
- { }
166
-
167
- Time (std::time_t time, int msec = 0 , int usec = 0 )
168
- : m_time(time)
169
- , m_tm(msec, usec)
170
- { }
171
-
172
- Time (const std::tm& tm, int msec, int usec = 0 , std::time_t time = 0 )
173
- : m_time(time)
174
- , m_tm(tm, msec, usec)
175
- { }
176
-
177
- std::time_t time () const
178
- {
179
- return m_time;
180
- }
181
-
182
- Tm tm () const
183
- {
184
- return m_tm;
185
- }
186
153
187
154
private:
188
155
std::time_t m_time;
189
- Tm m_tm;
156
+ std::optional<int > m_msec;
157
+ std::optional<int > m_usec;
190
158
};
191
159
192
160
using StorageType = Time;
@@ -204,24 +172,17 @@ namespace Fixpp
204
172
: m_time(std::time(nullptr ))
205
173
{ }
206
174
207
- Date (const std::tm& tm, std::time_t time)
175
+ Date (std::time_t time)
208
176
: m_time(time)
209
- , m_tm(tm)
210
177
{ }
211
178
212
179
std::time_t time () const
213
180
{
214
181
return m_time;
215
182
}
216
183
217
- std::tm tm () const
218
- {
219
- return m_tm;
220
- }
221
-
222
184
private:
223
185
std::time_t m_time;
224
- std::tm m_tm{};
225
186
};
226
187
227
188
using StorageType = Date;
@@ -238,7 +199,7 @@ namespace Fixpp
238
199
: m_time(std::time(nullptr ))
239
200
{ }
240
201
241
- Time (std::time_t time, int msec = 0 , int usec = 0 )
202
+ Time (std::time_t time, std::optional< int > msec = {}, std::optional< int > usec = {} )
242
203
: m_time(time)
243
204
, m_msec(msec)
244
205
, m_usec(usec)
@@ -249,20 +210,20 @@ namespace Fixpp
249
210
return m_time;
250
211
}
251
212
252
- int msec () const
213
+ std::optional< int > msec () const
253
214
{
254
215
return m_msec;
255
216
}
256
217
257
- int usec () const
218
+ std::optional< int > usec () const
258
219
{
259
220
return m_usec;
260
221
}
261
222
262
223
private:
263
224
std::time_t m_time;
264
- int m_msec{} ;
265
- int m_usec{} ;
225
+ std::optional< int > m_msec;
226
+ std::optional< int > m_usec;
266
227
};
267
228
268
229
using StorageType = Time;
@@ -275,17 +236,17 @@ namespace Fixpp
275
236
{
276
237
auto time = value.time ();
277
238
char buffer[32 ];
278
- strftime (buffer, sizeof buffer, " %Y%m%d-%H:%M:%S" , std::gmtime (&time));
239
+ strftime (buffer, sizeof buffer, " %Y%m%d-%H:%M:%S" , std::gmtime (&time));
279
240
os << buffer;
280
- if (value.tm ().msec ())
281
- {
282
- sprintf (buffer, " .%03d" , value.tm ().msec ());
283
- os << buffer;
284
- }
285
- if (value.tm ().usec ())
241
+ if (value.msec ())
286
242
{
287
- sprintf (buffer, " %03d" , value.tm ().usec ());
243
+ sprintf (buffer, " . %03d" , value.msec ().value ());
288
244
os << buffer;
245
+ if (value.usec ())
246
+ {
247
+ sprintf (buffer, " %03d" , value.usec ().value ());
248
+ os << buffer;
249
+ }
289
250
}
290
251
return os;
291
252
}
@@ -294,25 +255,25 @@ namespace Fixpp
294
255
{
295
256
auto time = value.time ();
296
257
char buffer[32 ];
297
- strftime (buffer, sizeof buffer, " %Y%m%d" , std::gmtime (&time));
258
+ strftime (buffer, sizeof buffer, " %Y%m%d" , std::gmtime (&time));
298
259
return os << buffer;
299
260
}
300
261
301
262
inline std::ostream& operator <<(std::ostream& os, const UTCTimeOnly::Time& value)
302
263
{
303
264
auto time = value.time ();
304
265
char buffer[32 ];
305
- strftime (buffer, sizeof buffer, " %H:%M:%S" , std::gmtime (&time));
266
+ strftime (buffer, sizeof buffer, " %H:%M:%S" , std::gmtime (&time));
306
267
os << buffer;
307
268
if (value.msec ())
308
269
{
309
- sprintf (buffer, " .%03d" , value.msec ());
310
- os << buffer;
311
- }
312
- if (value.usec ())
313
- {
314
- sprintf (buffer, " %03d" , value.usec ());
270
+ sprintf (buffer, " .%03d" , value.msec ().value ());
315
271
os << buffer;
272
+ if (value.usec ())
273
+ {
274
+ sprintf (buffer, " %03d" , value.usec ().value ());
275
+ os << buffer;
276
+ }
316
277
}
317
278
return os;
318
279
}
0 commit comments