diff --git a/src/bakatools/time/time.h b/src/bakatools/time/time.h new file mode 100644 index 0000000..3c03fd1 --- /dev/null +++ b/src/bakatools/time/time.h @@ -0,0 +1,76 @@ +#pragma once + +#include + +using Nanosecond = std::ratio<1,1000000000>; +using Microsecond = std::ratio<1,1000000>; +using Millisecond = std::ratio<1,1000>; +using Second = std::ratio<1,1>; +using Minute = std::ratio<60, 1>; +using Hour = std::ratio<3600, 1>; +using Day = std::ratio<84600, 1>; + +using SysClock = std::chrono::system_clock; +using SteadyClock = std::chrono::steady_clock; + +template +struct TimeSpan +{ + TimeSpan(int interval = 0) + : interval(std::chrono::duration(interval)) {} + TimeSpan(std::chrono::duration interval) + : interval(interval) {} + + template + TimeSpan get_as() + { + return TimeSpan(std::chrono::duration_cast>(interval)); + } + + int count() { return interval.count(); } + + TimeSpan

operator-(TimeSpan

& time_span) + { + return TimeSpan

(interval - time_span.interval); + } + + std::chrono::duration interval; +}; + +template +struct TimePoint +{ + TimePoint() = default; + TimePoint(std::chrono::time_point point) + { + this->point = std::chrono::time_point_cast>(point); + } + + template + TimePoint get_as() + { + return TimePoint(std::chrono::time_point_cast>(point)); + } + + TimeSpan

elasped() + { + return TimeSpan

(point.time_since_epoch()); + } + + bool is_steady() + { + return C::is_steady; + } + + TimeSpan

operator-(TimePoint& tp) + { + return TimeSpan

(point - tp.point); + } + + static TimePoint now() + { + return TimePoint(C::now()); + } + + std::chrono::time_point> point; +}; \ No newline at end of file