From e149d44a930cbfa5c8643fd560a12f4b19192010 Mon Sep 17 00:00:00 2001 From: Roland Conybeare Date: Tue, 17 Oct 2023 00:18:42 -0400 Subject: [PATCH] indentlog: compile fixes for OSX build (clang 11) --- include/xo/indentlog/scope.hpp | 4 +-- include/xo/indentlog/timeutil/timeutil.hpp | 14 +++++--- utest/timeutil.test.cpp | 37 +++++++++++++--------- 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/include/xo/indentlog/scope.hpp b/include/xo/indentlog/scope.hpp index 551589e9..30476664 100644 --- a/include/xo/indentlog/scope.hpp +++ b/include/xo/indentlog/scope.hpp @@ -232,7 +232,7 @@ namespace xo { } /*nesting_level*/ template - basic_scope::state_impl_type * + typename basic_scope::state_impl_type * basic_scope::require_indent_thread_local_state() { state_impl_type * local_state = require_thread_local_state(); @@ -244,7 +244,7 @@ namespace xo { } /*require_thread_local_stream*/ template - basic_scope::state_impl_type * + typename basic_scope::state_impl_type * basic_scope::require_thread_local_state() { if(!s_threadlocal_state) { diff --git a/include/xo/indentlog/timeutil/timeutil.hpp b/include/xo/indentlog/timeutil/timeutil.hpp index 740283f3..5e57aeb0 100644 --- a/include/xo/indentlog/timeutil/timeutil.hpp +++ b/include/xo/indentlog/timeutil/timeutil.hpp @@ -13,10 +13,6 @@ namespace xo { namespace time { - - using utc_nanos = std::chrono::time_point; - using nanos = std::chrono::nanoseconds; using microseconds = std::chrono::microseconds; using milliseconds = std::chrono::milliseconds; @@ -24,6 +20,12 @@ namespace xo { using hours = std::chrono::hours; using days = std::chrono::days; + using utc_nanos = std::chrono::time_point; + using utc_micros = std::chrono::time_point; + + struct timeutil { static utc_nanos now() { return utc_nanos(std::chrono::system_clock::now()); @@ -168,7 +170,9 @@ namespace xo { /* use yyyymmdd.hh:mm:ss.nnnnnn */ - time_t t0_time_t = (std::chrono::system_clock::to_time_t(t0)); + time_t t0_time_t + = (std::chrono::system_clock::to_time_t + (std::chrono::time_point_cast(t0))); //time_t t0_time_t = (std::chrono::system_clock::to_time_t(std::chrono::time_point_cast(t0))); /* convert to std::tm, in UTC coords, diff --git a/utest/timeutil.test.cpp b/utest/timeutil.test.cpp index fb50ca63..c0c17bf2 100644 --- a/utest/timeutil.test.cpp +++ b/utest/timeutil.test.cpp @@ -10,75 +10,82 @@ using namespace xo::time; using namespace std::chrono; namespace ut { + template + inline utc_micros to_micros(FromTime tm) { + return std::chrono::time_point_cast(tm); + } /*to_micros*/ + TEST_CASE("epoch", "[timeutil]") { //tag_config::tag_color = color_spec_type::none(); + using xo::time::microseconds; + utc_nanos t0 = timeutil::epoch(); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(0)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(0)); } /*TEST_CASE(epoch)*/ TEST_CASE("ymd_hms", "[timeutil]") { { utc_nanos t0 = timeutil::ymd_hms(19700101 /*ymd*/, 0 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(0)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(0)); } { utc_nanos t0 = timeutil::ymd_hms(19700101 /*ymd*/, 1 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(1)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(1)); } { utc_nanos t0 = timeutil::ymd_hms(19700101 /*ymd*/, 100 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(60)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(60)); } { utc_nanos t0 = timeutil::ymd_hms(19700101 /*ymd*/, 10000 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(3600)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(3600)); } { utc_nanos t0 = timeutil::ymd_hms(19700101 /*ymd*/, 235959 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(86399)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(86399)); } { utc_nanos t0 = timeutil::ymd_hms(19700102 /*ymd*/, 235959 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(86400 + 86399)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(86400 + 86399)); } { utc_nanos t0 = timeutil::ymd_hms(19700131 /*ymd*/, 235959 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(30 * 86400 + 86399)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(30 * 86400 + 86399)); } { utc_nanos t0 = timeutil::ymd_hms(19700201 /*ymd*/, 235959 /*hms*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(31 * 86400 + 86399)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(31 * 86400 + 86399)); } } /*TEST_CASE(ymd_hms)*/ TEST_CASE("ymd_midnight", "[timeutil]") { { utc_nanos t0 = timeutil::ymd_midnight(19700101 /*ymd*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(0)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(0)); } { utc_nanos t0 = timeutil::ymd_midnight(19700102 /*ymd*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(86400)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(86400)); } { utc_nanos t0 = timeutil::ymd_midnight(19700131 /*ymd*/); - REQUIRE(std::chrono::system_clock::to_time_t(t0) == std::time_t(30 * 86400)); + REQUIRE(std::chrono::system_clock::to_time_t(to_micros(t0)) == std::time_t(30 * 86400)); } { utc_nanos t0 = timeutil::ymd_midnight(19700201 /*ymd*/); - REQUIRE(system_clock::to_time_t(t0) == std::time_t(31 * 86400)); + REQUIRE(system_clock::to_time_t(to_micros(t0)) == std::time_t(31 * 86400)); } } /*TEST_CASE(ymd_midnight)*/ @@ -144,10 +151,10 @@ namespace ut { INFO(xtag("tc.utc_ymd_hms_usec_str", tc.utc_ymd_hms_usec_str_)); utc_nanos const t0 = timeutil::ymd_hms_usec(tc.ymd_, tc.hms_, tc.usec_); - REQUIRE(system_clock::to_time_t(t0) == std::time_t(tc.epoch_sec_)); + REQUIRE(system_clock::to_time_t(to_micros(t0)) == std::time_t(tc.epoch_sec_)); auto x = timeutil::utc_split_vs_midnight(t0); - REQUIRE(system_clock::to_time_t(x.first) == tc.midnight_sec_); + REQUIRE(system_clock::to_time_t(to_micros(x.first)) == tc.midnight_sec_); REQUIRE(x.second == seconds(tc.fractional_sec_) + microseconds(tc.fractional_usec_)); {