Skip to content

Commit d123067

Browse files
committed
refactor: Remove duplication in PrintValue for both datetime types
1 parent dcc3673 commit d123067

1 file changed

Lines changed: 12 additions & 24 deletions

File tree

src/utils/utils.cpp

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -291,44 +291,32 @@ void PrintValue(std::ostream &os, const mg_local_date_time *local_date_time) {
291291
PrintValue(os, time);
292292
}
293293

294-
void PrintValue(std::ostream &os, const mg_date_time *date_time) {
294+
void PrintDateTimeComponents(std::ostream &os, int64_t seconds, int64_t nanoseconds) {
295295
namespace chrono = std::chrono;
296-
auto const seconds = chrono::seconds(mg_date_time_seconds(date_time));
297-
auto const days = chrono::duration_cast<date::days>(seconds);
296+
auto const secs = chrono::seconds(seconds);
297+
auto const days = chrono::duration_cast<date::days>(secs);
298298
auto const date = mg_date_make(days.count());
299299

300-
auto const nanoseconds =
301-
chrono::duration_cast<chrono::nanoseconds>(seconds) - chrono::duration_cast<chrono::nanoseconds>(days);
302-
auto const time = mg_local_time_make(nanoseconds.count() + mg_date_time_nanoseconds(date_time));
300+
auto const nanos =
301+
chrono::duration_cast<chrono::nanoseconds>(secs) - chrono::duration_cast<chrono::nanoseconds>(days);
302+
auto const time = mg_local_time_make(nanos.count() + nanoseconds);
303303

304304
PrintValue(os, date);
305305
os << " ";
306306
PrintValue(os, time);
307+
}
308+
309+
void PrintValue(std::ostream &os, const mg_date_time *date_time) {
310+
PrintDateTimeComponents(os, mg_date_time_seconds(date_time), mg_date_time_nanoseconds(date_time));
307311
auto const minutes = mg_date_time_tz_offset_minutes(date_time);
308312
os << (minutes >= 0 ? '+' : '-') << std::setfill('0') << std::setw(2) << (std::abs(minutes) / 60) << ":"
309313
<< std::setfill('0') << std::setw(2) << (std::abs(minutes) % 60);
310314
}
311315

312316
void PrintValue(std::ostream &os, const mg_date_time_zone_id *date_time_zone_id) {
313-
namespace chrono = std::chrono;
314-
315-
int64_t raw_seconds = mg_date_time_zone_id_seconds(date_time_zone_id);
316-
int64_t raw_nanos = mg_date_time_zone_id_nanoseconds(date_time_zone_id);
317-
const mg_string *timezone_name = mg_date_time_zone_id_timezone_name(date_time_zone_id);
318-
319-
auto const seconds = chrono::seconds(raw_seconds);
320-
auto const days = chrono::duration_cast<date::days>(seconds);
321-
auto const date = mg_date_make(days.count());
322-
323-
auto const nanoseconds =
324-
chrono::duration_cast<chrono::nanoseconds>(seconds) - chrono::duration_cast<chrono::nanoseconds>(days);
325-
auto const time = mg_local_time_make(nanoseconds.count() + raw_nanos);
326-
327-
PrintValue(os, date);
328-
os << " ";
329-
PrintValue(os, time);
317+
PrintDateTimeComponents(os, mg_date_time_zone_id_seconds(date_time_zone_id), mg_date_time_zone_id_nanoseconds(date_time_zone_id));
330318
os << "[";
331-
PrintStringUnescaped(os, timezone_name);
319+
PrintStringUnescaped(os, mg_date_time_zone_id_timezone_name(date_time_zone_id));
332320
os << "]";
333321
}
334322

0 commit comments

Comments
 (0)