15726e559SLouis Dionne // -*- C++ -*- 25726e559SLouis Dionne //===----------------------------------------------------------------------===// 35726e559SLouis Dionne // 45726e559SLouis Dionne // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 55726e559SLouis Dionne // See https://llvm.org/LICENSE.txt for license information. 65726e559SLouis Dionne // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 75726e559SLouis Dionne // 85726e559SLouis Dionne //===----------------------------------------------------------------------===// 95726e559SLouis Dionne 105726e559SLouis Dionne #ifndef _LIBCPP___CHRONO_FILE_CLOCK_H 115726e559SLouis Dionne #define _LIBCPP___CHRONO_FILE_CLOCK_H 125726e559SLouis Dionne 135726e559SLouis Dionne #include <__chrono/duration.h> 145726e559SLouis Dionne #include <__chrono/system_clock.h> 155726e559SLouis Dionne #include <__chrono/time_point.h> 165726e559SLouis Dionne #include <__config> 175726e559SLouis Dionne #include <ratio> 185726e559SLouis Dionne 195726e559SLouis Dionne #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 205726e559SLouis Dionne # pragma GCC system_header 215726e559SLouis Dionne #endif 225726e559SLouis Dionne 235726e559SLouis Dionne #ifndef _LIBCPP_CXX03_LANG 245726e559SLouis Dionne _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM 255726e559SLouis Dionne struct _FilesystemClock; 265726e559SLouis Dionne _LIBCPP_END_NAMESPACE_FILESYSTEM 275726e559SLouis Dionne #endif // !_LIBCPP_CXX03_LANG 285726e559SLouis Dionne 294f15267dSNikolas Klauser #if _LIBCPP_STD_VER >= 20 305726e559SLouis Dionne 315726e559SLouis Dionne _LIBCPP_BEGIN_NAMESPACE_STD 325726e559SLouis Dionne 339783f28cSLouis Dionne namespace chrono { 345726e559SLouis Dionne 355726e559SLouis Dionne // [time.clock.file], type file_clock 36ac8c9f1eSLouis Dionne using file_clock = filesystem::_FilesystemClock; 375726e559SLouis Dionne 385726e559SLouis Dionne template <class _Duration> 395726e559SLouis Dionne using file_time = time_point<file_clock, _Duration>; 405726e559SLouis Dionne 415726e559SLouis Dionne } // namespace chrono 425726e559SLouis Dionne 435726e559SLouis Dionne _LIBCPP_END_NAMESPACE_STD 445726e559SLouis Dionne 454f15267dSNikolas Klauser #endif // _LIBCPP_STD_VER >= 20 465726e559SLouis Dionne 475726e559SLouis Dionne #ifndef _LIBCPP_CXX03_LANG 485726e559SLouis Dionne _LIBCPP_BEGIN_NAMESPACE_FILESYSTEM 495726e559SLouis Dionne struct _FilesystemClock { 50*ba87515fSNikolas Klauser # if _LIBCPP_HAS_INT128 515726e559SLouis Dionne typedef __int128_t rep; 525726e559SLouis Dionne typedef nano period; 535726e559SLouis Dionne # else 545726e559SLouis Dionne typedef long long rep; 555726e559SLouis Dionne typedef nano period; 565726e559SLouis Dionne # endif 575726e559SLouis Dionne 585726e559SLouis Dionne typedef chrono::duration<rep, period> duration; 595726e559SLouis Dionne typedef chrono::time_point<_FilesystemClock> time_point; 605726e559SLouis Dionne 619783f28cSLouis Dionne _LIBCPP_EXPORTED_FROM_ABI static _LIBCPP_CONSTEXPR_SINCE_CXX14 const bool is_steady = false; 625726e559SLouis Dionne 63f1ea0b11SNikolas Klauser _LIBCPP_AVAILABILITY_FILESYSTEM_LIBRARY _LIBCPP_EXPORTED_FROM_ABI static time_point now() noexcept; 645726e559SLouis Dionne 654f15267dSNikolas Klauser # if _LIBCPP_STD_VER >= 20 665726e559SLouis Dionne template <class _Duration> 679783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI static chrono::sys_time<_Duration> to_sys(const chrono::file_time<_Duration>& __t) { 685726e559SLouis Dionne return chrono::sys_time<_Duration>(__t.time_since_epoch()); 695726e559SLouis Dionne } 705726e559SLouis Dionne 715726e559SLouis Dionne template <class _Duration> 729783f28cSLouis Dionne _LIBCPP_HIDE_FROM_ABI static chrono::file_time<_Duration> from_sys(const chrono::sys_time<_Duration>& __t) { 735726e559SLouis Dionne return chrono::file_time<_Duration>(__t.time_since_epoch()); 745726e559SLouis Dionne } 754f15267dSNikolas Klauser # endif // _LIBCPP_STD_VER >= 20 765726e559SLouis Dionne }; 775726e559SLouis Dionne _LIBCPP_END_NAMESPACE_FILESYSTEM 785726e559SLouis Dionne #endif // !_LIBCPP_CXX03_LANG 795726e559SLouis Dionne 805726e559SLouis Dionne #endif // _LIBCPP___CHRONO_FILE_CLOCK_H 81