diff options
Diffstat (limited to 'src/lib/util/timeconv.h')
-rw-r--r-- | src/lib/util/timeconv.h | 74 |
1 files changed, 37 insertions, 37 deletions
diff --git a/src/lib/util/timeconv.h b/src/lib/util/timeconv.h index 26decf0fd65..91327dbac16 100644 --- a/src/lib/util/timeconv.h +++ b/src/lib/util/timeconv.h @@ -13,15 +13,16 @@ #pragma once -#include "osdcore.h" #include "coreutil.h" -#include <chrono> #include <algorithm> +#include <chrono> +#include <cstring> #include <stdexcept> namespace util { + /*************************************************************************** GLOBAL VARIABLES ***************************************************************************/ @@ -48,6 +49,8 @@ struct arbitrary_datetime int hour; // hour (0-23) int minute; // minute (0-59) int second; // second (0-59) + + static struct arbitrary_datetime now(); }; @@ -56,7 +59,7 @@ struct arbitrary_datetime // date of the epoch's begining //--------------------------------------------------------- -template<typename Rep, int Y, int M, int D, int H, int N, int S, typename Ratio> +template <typename Rep, int Y, int M, int D, int H, int N, int S, typename Ratio> class arbitrary_clock { public: @@ -87,16 +90,16 @@ public: // with a different scale to this arbitrary_clock's scale //--------------------------------------------------------- - template<typename Rep2, int Y2, int M2, int D2, int H2, int N2, int S2, typename Ratio2> - static time_point from_arbitrary_time_point(const std::chrono::time_point<arbitrary_clock<Rep2, Y2, M2, D2, H2, N2, S2, Ratio2> > &tp) + template <typename Rep2, int YY, int MM, int DD, int HH, int NN, int SS, typename Ratio2> + static time_point from_arbitrary_time_point(const std::chrono::time_point<arbitrary_clock<Rep2, YY, MM, DD, HH, NN, SS, Ratio2> > &tp) { arbitrary_datetime dt; - dt.year = Y2; - dt.month = M2; - dt.day_of_month = D2; - dt.hour = H2; - dt.minute = N2; - dt.second = S2; + dt.year = YY; + dt.month = MM; + dt.day_of_month = DD; + dt.hour = HH; + dt.minute = NN; + dt.second = SS; const duration adjustment = duration_from_arbitrary_datetime(dt, false); const duration result_duration = std::chrono::duration_cast<duration>(tp.time_since_epoch() + adjustment); @@ -109,10 +112,10 @@ public: // of this scale to one of different scale //--------------------------------------------------------- - template<typename Rep2, int Y2, int M2, int D2, int H2, int N2, int S2, typename Ratio2> - static std::chrono::time_point<arbitrary_clock<Rep2, Y2, M2, D2, H2, N2, S2, Ratio2> > to_arbitrary_time_point(const time_point &tp) + template <typename Rep2, int YY, int MM, int DD, int HH, int NN, int SS, typename Ratio2> + static std::chrono::time_point<arbitrary_clock<Rep2, YY, MM, DD, HH, NN, SS, Ratio2> > to_arbitrary_time_point(const time_point &tp) { - return arbitrary_clock<Rep2, Y2, M2, D2, H2, N2, S2, Ratio2>::from_arbitrary_time_point(tp); + return arbitrary_clock<Rep2, YY, MM, DD, HH, NN, SS, Ratio2>::from_arbitrary_time_point(tp); } @@ -123,14 +126,14 @@ public: static struct tm to_tm(const time_point &tp) { std::chrono::time_point<tm_conversion_clock> normalized_tp = to_arbitrary_time_point< - std::int64_t, - tm_conversion_clock::base_year, - tm_conversion_clock::base_month, - tm_conversion_clock::base_day, - tm_conversion_clock::base_hour, - tm_conversion_clock::base_minute, - tm_conversion_clock::base_second, - tm_conversion_clock::period>(tp); + std::int64_t, + tm_conversion_clock::base_year, + tm_conversion_clock::base_month, + tm_conversion_clock::base_day, + tm_conversion_clock::base_hour, + tm_conversion_clock::base_minute, + tm_conversion_clock::base_second, + tm_conversion_clock::period>(tp); return internal_to_tm(normalized_tp.time_since_epoch()); } @@ -142,14 +145,14 @@ public: static std::chrono::time_point<std::chrono::system_clock> to_system_clock(const time_point &tp) { auto normalized_tp = to_arbitrary_time_point< - std::int64_t, - system_conversion_clock::base_year, - system_conversion_clock::base_month, - system_conversion_clock::base_day, - system_conversion_clock::base_hour, - system_conversion_clock::base_minute, - system_conversion_clock::base_second, - system_conversion_clock::period>(tp); + std::int64_t, + system_conversion_clock::base_year, + system_conversion_clock::base_month, + system_conversion_clock::base_day, + system_conversion_clock::base_hour, + system_conversion_clock::base_minute, + system_conversion_clock::base_second, + system_conversion_clock::period>(tp); return std::chrono::time_point<std::chrono::system_clock>(normalized_tp.time_since_epoch() + system_clock_adjustment); } @@ -179,13 +182,10 @@ private: static int clamp_or_throw(int value, int minimum, int maximum, bool clamp, const char *out_of_range_message) { - if (value < minimum || value > maximum) - { - if (clamp) - value = std::min(std::max(value, minimum), maximum); - else - throw std::out_of_range(out_of_range_message); - } + if (clamp) + value = std::clamp(value, minimum, maximum); + else if (value < minimum || value > maximum) + throw std::out_of_range(out_of_range_message); return value; } |