xref: /netbsd-src/external/apache2/llvm/dist/libcxx/include/ctime (revision 4d6fc14bc9b0c5bf3e30be318c143ee82cadd108)
1*4d6fc14bSjoerg// -*- C++ -*-
2*4d6fc14bSjoerg//===---------------------------- ctime -----------------------------------===//
3*4d6fc14bSjoerg//
4*4d6fc14bSjoerg// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
5*4d6fc14bSjoerg// See https://llvm.org/LICENSE.txt for license information.
6*4d6fc14bSjoerg// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7*4d6fc14bSjoerg//
8*4d6fc14bSjoerg//===----------------------------------------------------------------------===//
9*4d6fc14bSjoerg
10*4d6fc14bSjoerg#ifndef _LIBCPP_CTIME
11*4d6fc14bSjoerg#define _LIBCPP_CTIME
12*4d6fc14bSjoerg
13*4d6fc14bSjoerg/*
14*4d6fc14bSjoerg    ctime synopsis
15*4d6fc14bSjoerg
16*4d6fc14bSjoergMacros:
17*4d6fc14bSjoerg
18*4d6fc14bSjoerg    NULL
19*4d6fc14bSjoerg    CLOCKS_PER_SEC
20*4d6fc14bSjoerg    TIME_UTC // C++17
21*4d6fc14bSjoerg
22*4d6fc14bSjoergnamespace std
23*4d6fc14bSjoerg{
24*4d6fc14bSjoerg
25*4d6fc14bSjoergTypes:
26*4d6fc14bSjoerg
27*4d6fc14bSjoerg    clock_t
28*4d6fc14bSjoerg    size_t
29*4d6fc14bSjoerg    time_t
30*4d6fc14bSjoerg    tm
31*4d6fc14bSjoerg    timespec // C++17
32*4d6fc14bSjoerg
33*4d6fc14bSjoergclock_t clock();
34*4d6fc14bSjoergdouble difftime(time_t time1, time_t time0);
35*4d6fc14bSjoergtime_t mktime(tm* timeptr);
36*4d6fc14bSjoergtime_t time(time_t* timer);
37*4d6fc14bSjoergchar* asctime(const tm* timeptr);
38*4d6fc14bSjoergchar* ctime(const time_t* timer);
39*4d6fc14bSjoergtm*    gmtime(const time_t* timer);
40*4d6fc14bSjoergtm* localtime(const time_t* timer);
41*4d6fc14bSjoergsize_t strftime(char* restrict s, size_t maxsize, const char* restrict format,
42*4d6fc14bSjoerg                const tm* restrict timeptr);
43*4d6fc14bSjoergint timespec_get( struct timespec *ts, int base); // C++17
44*4d6fc14bSjoerg}  // std
45*4d6fc14bSjoerg
46*4d6fc14bSjoerg*/
47*4d6fc14bSjoerg
48*4d6fc14bSjoerg#include <__config>
49*4d6fc14bSjoerg#include <time.h>
50*4d6fc14bSjoerg
51*4d6fc14bSjoerg#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
52*4d6fc14bSjoerg#pragma GCC system_header
53*4d6fc14bSjoerg#endif
54*4d6fc14bSjoerg
55*4d6fc14bSjoerg// FIXME:
56*4d6fc14bSjoerg// Apple SDKs don't define ::timespec_get unconditionally in C++ mode. This
57*4d6fc14bSjoerg// should be fixed in future SDKs, but for the time being we need to avoid
58*4d6fc14bSjoerg// trying to use that declaration when the SDK doesn't provide it. Note that
59*4d6fc14bSjoerg// we're detecting this here instead of in <__config> because we can't include
60*4d6fc14bSjoerg// system headers from <__config>, since it leads to circular module dependencies.
61*4d6fc14bSjoerg// This is also meant to be a very temporary workaround until the SDKs are fixed.
62*4d6fc14bSjoerg#if defined(__APPLE__)
63*4d6fc14bSjoerg#   include <sys/cdefs.h>
64*4d6fc14bSjoerg#   if defined(_LIBCPP_HAS_TIMESPEC_GET) && (__DARWIN_C_LEVEL < __DARWIN_C_FULL)
65*4d6fc14bSjoerg#       define _LIBCPP_HAS_TIMESPEC_GET_NOT_ACTUALLY_PROVIDED
66*4d6fc14bSjoerg#   endif
67*4d6fc14bSjoerg#endif
68*4d6fc14bSjoerg
69*4d6fc14bSjoerg_LIBCPP_BEGIN_NAMESPACE_STD
70*4d6fc14bSjoerg
71*4d6fc14bSjoergusing ::clock_t;
72*4d6fc14bSjoergusing ::size_t;
73*4d6fc14bSjoergusing ::time_t;
74*4d6fc14bSjoergusing ::tm;
75*4d6fc14bSjoerg#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_TIMESPEC_GET)
76*4d6fc14bSjoergusing ::timespec;
77*4d6fc14bSjoerg#endif
78*4d6fc14bSjoergusing ::clock;
79*4d6fc14bSjoergusing ::difftime;
80*4d6fc14bSjoergusing ::mktime;
81*4d6fc14bSjoergusing ::time;
82*4d6fc14bSjoerg#ifndef _LIBCPP_HAS_NO_THREAD_UNSAFE_C_FUNCTIONS
83*4d6fc14bSjoergusing ::asctime;
84*4d6fc14bSjoergusing ::ctime;
85*4d6fc14bSjoergusing ::gmtime;
86*4d6fc14bSjoergusing ::localtime;
87*4d6fc14bSjoerg#endif
88*4d6fc14bSjoergusing ::strftime;
89*4d6fc14bSjoerg#if _LIBCPP_STD_VER > 14 && defined(_LIBCPP_HAS_TIMESPEC_GET) && !defined(_LIBCPP_HAS_TIMESPEC_GET_NOT_ACTUALLY_PROVIDED)
90*4d6fc14bSjoergusing ::timespec_get;
91*4d6fc14bSjoerg#endif
92*4d6fc14bSjoerg
93*4d6fc14bSjoerg_LIBCPP_END_NAMESPACE_STD
94*4d6fc14bSjoerg
95*4d6fc14bSjoerg#endif // _LIBCPP_CTIME
96