#ifndef _TIME_H
#define _TIME_H

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#ifdef __cplusplus
#define NULL 0L
#else
#define NULL ((void*)0)
#endif

#define __NEED_size_t
#define __NEED_time_t
#define __NEED_clock_t
#define __NEED_struct_timespec

#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || \
    defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
#define __NEED_clockid_t
#define __NEED_timer_t
#define __NEED_pid_t
#define __NEED_locale_t
#endif

#include <bits/alltypes.h>

#if defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
#define __tm_gmtoff tm_gmtoff
#define __tm_zone tm_zone
#endif

struct tm {
  int tm_sec;
  int tm_min;
  int tm_hour;
  int tm_mday;
  int tm_mon;
  int tm_year;
  int tm_wday;
  int tm_yday;
  int tm_isdst;
  long __tm_gmtoff;
  const char* __tm_zone;
};

clock_t clock(void);
time_t time(time_t*);
double difftime(time_t, time_t);
time_t mktime(struct tm*);
size_t strftime(char* __restrict,
                size_t,
                const char* __restrict,
                const struct tm* __restrict);
struct tm* gmtime(const time_t*);
struct tm* localtime(const time_t*);
char* asctime(const struct tm*);
char* ctime(const time_t*);
int timespec_get(struct timespec*, int);

#define CLOCKS_PER_SEC 1000000L

#define TIME_UTC 1

#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) || \
    defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE) || defined(_BSD_SOURCE)

size_t strftime_l(char* __restrict,
                  size_t,
                  const char* __restrict,
                  const struct tm* __restrict,
                  locale_t);

struct tm* gmtime_r(const time_t* __restrict, struct tm* __restrict);
struct tm* localtime_r(const time_t* __restrict, struct tm* __restrict);
char* asctime_r(const struct tm* __restrict, char* __restrict);
char* ctime_r(const time_t*, char*);

void tzset(void);

struct itimerspec {
  struct timespec it_interval;
  struct timespec it_value;
};

#define CLOCK_REALTIME 0
#define CLOCK_MONOTONIC 1
#define CLOCK_PROCESS_CPUTIME_ID 2
#define CLOCK_THREAD_CPUTIME_ID 3
#define CLOCK_MONOTONIC_RAW 4
#define CLOCK_REALTIME_COARSE 5
#define CLOCK_MONOTONIC_COARSE 6
#define CLOCK_BOOTTIME 7
#define CLOCK_REALTIME_ALARM 8
#define CLOCK_BOOTTIME_ALARM 9
#define CLOCK_SGI_CYCLE 10
#define CLOCK_TAI 11

#define TIMER_ABSTIME 1

int nanosleep(const struct timespec*, struct timespec*);
int clock_getres(clockid_t, struct timespec*);
int clock_gettime(clockid_t, struct timespec*);
int clock_settime(clockid_t, const struct timespec*);
int clock_nanosleep(clockid_t, int, const struct timespec*, struct timespec*);
int clock_getcpuclockid(pid_t, clockid_t*);

struct sigevent;
int timer_create(clockid_t, struct sigevent* __restrict, timer_t* __restrict);
int timer_delete(timer_t);
int timer_settime(timer_t,
                  int,
                  const struct itimerspec* __restrict,
                  struct itimerspec* __restrict);
int timer_gettime(timer_t, struct itimerspec*);
int timer_getoverrun(timer_t);

#endif

#if defined(_XOPEN_SOURCE) || defined(_BSD_SOURCE) || defined(_GNU_SOURCE)
char* strptime(const char* __restrict,
               const char* __restrict,
               struct tm* __restrict);
extern int daylight;
extern long timezone;
extern char* tzname[2];
extern int getdate_err;
struct tm* getdate(const char*);
#endif

#if defined(_GNU_SOURCE) || defined(_BSD_SOURCE)
int stime(const time_t*);
time_t timegm(struct tm*);
#endif

#ifdef __cplusplus
}
#endif

#endif
