#pragma once #include #include #include #include namespace mbgl { using Clock = std::chrono::steady_clock; using Seconds = std::chrono::seconds; using Milliseconds = std::chrono::milliseconds; using TimePoint = Clock::time_point; using Duration = Clock::duration; // Used to measure second-precision times, such as times gathered from HTTP responses. using Timestamp = std::chrono::time_point; namespace util { inline Timestamp now() { return platform::now(); } // Returns the RFC1123 formatted date. E.g. "Tue, 04 Nov 2014 02:13:24 GMT" std::string rfc1123(Timestamp); // YYYY-mm-dd HH:MM:SS e.g. "2015-11-26 16:11:23" std::string iso8601(Timestamp); Timestamp parseTimestamp(const char *); Timestamp parseTimestamp(int32_t timestamp); // C++17 polyfill #if defined(_MSC_VER) && !defined(__clang__) template ::is_signed, int> = 0> _NODISCARD constexpr std::chrono::duration<_Rep, _Period> abs(const std::chrono::duration<_Rep, _Period> _Dur) noexcept( std::is_arithmetic_v<_Rep>) /* strengthened */ { // create a duration with count() the absolute value of _Dur.count() return _Dur < std::chrono::duration<_Rep, _Period>::zero() ? std::chrono::duration<_Rep, _Period>::zero() - _Dur : _Dur; } #else template ::min() < std::chrono::duration::zero()>> constexpr std::chrono::duration abs(std::chrono::duration d) { return d >= d.zero() ? d : -d; } #endif } // namespace util } // namespace mbgl