#pragma once

#ifdef __cplusplus
extern "C" {
#endif

#include <features.h>

#define __NEED_time_t
#define __NEED_clockid_t
#define __NEED_struct_timespec
#define __NEED_sigset_t
#define __NEED_pthread_t
#define __NEED_pthread_attr_t
#define __NEED_pthread_mutexattr_t
#define __NEED_pthread_condattr_t
#define __NEED_pthread_rwlockattr_t
#define __NEED_pthread_barrierattr_t
#define __NEED_pthread_mutex_t
#define __NEED_pthread_cond_t
#define __NEED_pthread_rwlock_t
#define __NEED_pthread_barrier_t
#define __NEED_pthread_spinlock_t
#define __NEED_pthread_key_t
#define __NEED_pthread_once_t
#define __NEED_size_t

#include <bits/alltypes.h>

#include <sched.h>
#include <time.h>

#define PTHREAD_CREATE_JOINABLE 0
#define PTHREAD_CREATE_DETACHED 1

#define PTHREAD_MUTEX_NORMAL 0
#define PTHREAD_MUTEX_DEFAULT 0
#define PTHREAD_MUTEX_RECURSIVE 1
#define PTHREAD_MUTEX_ERRORCHECK 2

#define PTHREAD_MUTEX_STALLED 0
#define PTHREAD_MUTEX_ROBUST 1

#define PTHREAD_PRIO_NONE 0
#define PTHREAD_PRIO_INHERIT 1
#define PTHREAD_PRIO_PROTECT 2

#define PTHREAD_INHERIT_SCHED 0
#define PTHREAD_EXPLICIT_SCHED 1

#define PTHREAD_SCOPE_SYSTEM 0
#define PTHREAD_SCOPE_PROCESS 1

#define PTHREAD_PROCESS_PRIVATE 0

#define PTHREAD_MUTEX_INITIALIZER \
    {}
#define PTHREAD_RWLOCK_INITIALIZER \
    {}
#define PTHREAD_COND_INITIALIZER \
    {}
#define PTHREAD_ONCE_INIT 0

#define PTHREAD_CANCEL_ENABLE 0
#define PTHREAD_CANCEL_DISABLE 1
#define PTHREAD_CANCEL_MASKED 2

#define PTHREAD_CANCEL_DEFERRED 0
#define PTHREAD_CANCEL_ASYNCHRONOUS 1

#define PTHREAD_CANCELED ((void*)-1)

#define PTHREAD_BARRIER_SERIAL_THREAD (-1)

int pthread_create(pthread_t* __restrict, const pthread_attr_t* __restrict, void* (*)(void*),
                   void* __restrict);
int pthread_detach(pthread_t);
_Noreturn void pthread_exit(void*);
int pthread_join(pthread_t, void**);

pthread_t pthread_self(void);

int pthread_equal(pthread_t, pthread_t);
#ifndef __cplusplus
#define pthread_equal(x, y) ((x) == (y))
#endif

int pthread_setcancelstate(int, int*);
int pthread_setcanceltype(int, int*);
void pthread_testcancel(void);
int pthread_cancel(pthread_t);

int pthread_once(pthread_once_t*, void (*)(void));

int pthread_mutex_init(pthread_mutex_t* __restrict, const pthread_mutexattr_t* __restrict);
int pthread_mutex_lock(pthread_mutex_t*);
int pthread_mutex_unlock(pthread_mutex_t*);
int pthread_mutex_trylock(pthread_mutex_t*);
int pthread_mutex_timedlock(pthread_mutex_t* __restrict, const struct timespec* __restrict);
int pthread_mutex_destroy(pthread_mutex_t*);
int pthread_mutex_consistent(pthread_mutex_t*);

int pthread_mutex_getprioceiling(const pthread_mutex_t* __restrict, int* __restrict);
int pthread_mutex_setprioceiling(pthread_mutex_t* __restrict, int, int* __restrict);

int pthread_cond_init(pthread_cond_t* __restrict, const pthread_condattr_t* __restrict);
int pthread_cond_destroy(pthread_cond_t*);
int pthread_cond_wait(pthread_cond_t* __restrict, pthread_mutex_t* __restrict);
int pthread_cond_timedwait(pthread_cond_t* __restrict, pthread_mutex_t* __restrict,
                           const struct timespec* __restrict);
int pthread_cond_broadcast(pthread_cond_t*);
int pthread_cond_signal(pthread_cond_t*);

int pthread_rwlock_init(pthread_rwlock_t* __restrict, const pthread_rwlockattr_t* __restrict);
int pthread_rwlock_destroy(pthread_rwlock_t*);
int pthread_rwlock_rdlock(pthread_rwlock_t*);
int pthread_rwlock_tryrdlock(pthread_rwlock_t*);
int pthread_rwlock_timedrdlock(pthread_rwlock_t* __restrict, const struct timespec* __restrict);
int pthread_rwlock_wrlock(pthread_rwlock_t*);
int pthread_rwlock_trywrlock(pthread_rwlock_t*);
int pthread_rwlock_timedwrlock(pthread_rwlock_t* __restrict, const struct timespec* __restrict);
int pthread_rwlock_unlock(pthread_rwlock_t*);

int pthread_spin_init(pthread_spinlock_t*, int);
int pthread_spin_destroy(pthread_spinlock_t*);
int pthread_spin_lock(pthread_spinlock_t*);
int pthread_spin_trylock(pthread_spinlock_t*);
int pthread_spin_unlock(pthread_spinlock_t*);

int pthread_barrier_init(pthread_barrier_t* __restrict, const pthread_barrierattr_t* __restrict,
                         unsigned);
int pthread_barrier_destroy(pthread_barrier_t*);
int pthread_barrier_wait(pthread_barrier_t*);

int pthread_key_create(pthread_key_t*, void (*)(void*));
int pthread_key_delete(pthread_key_t);
void* pthread_getspecific(pthread_key_t);
int pthread_setspecific(pthread_key_t, const void*);

int pthread_attr_init(pthread_attr_t*);
int pthread_attr_destroy(pthread_attr_t*);

int pthread_attr_getguardsize(const pthread_attr_t* __restrict, size_t* __restrict);
int pthread_attr_setguardsize(pthread_attr_t*, size_t);
int pthread_attr_getstacksize(const pthread_attr_t* __restrict, size_t* __restrict);
int pthread_attr_setstacksize(pthread_attr_t*, size_t);
int pthread_attr_getdetachstate(const pthread_attr_t*, int*);
int pthread_attr_setdetachstate(pthread_attr_t*, int);
int pthread_attr_getstack(const pthread_attr_t* __restrict, void** __restrict, size_t* __restrict);
int pthread_attr_setstack(pthread_attr_t*, void*, size_t)
    __attribute__((__deprecated__("pthread_attr_setstack is not available in Fuchsia; perhaps pthread_attr_setstacksize and/or pthread_attr_setguardsize is sufficient for your needs?")));
int pthread_attr_getschedparam(const pthread_attr_t* __restrict, struct sched_param* __restrict);
int pthread_attr_setschedparam(pthread_attr_t* __restrict, const struct sched_param* __restrict);

int pthread_mutexattr_destroy(pthread_mutexattr_t*);
int pthread_mutexattr_getprioceiling(const pthread_mutexattr_t* __restrict, int* __restrict);
int pthread_mutexattr_getprotocol(const pthread_mutexattr_t* __restrict, int* __restrict);
int pthread_mutexattr_getrobust(const pthread_mutexattr_t* __restrict, int* __restrict);
int pthread_mutexattr_gettype(const pthread_mutexattr_t* __restrict, int* __restrict);
int pthread_mutexattr_init(pthread_mutexattr_t*);
int pthread_mutexattr_setprioceiling(pthread_mutexattr_t*, int);
int pthread_mutexattr_setprotocol(pthread_mutexattr_t*, int);
int pthread_mutexattr_setrobust(pthread_mutexattr_t*, int);
int pthread_mutexattr_settype(pthread_mutexattr_t*, int);

int pthread_condattr_init(pthread_condattr_t*);
int pthread_condattr_destroy(pthread_condattr_t*);
int pthread_condattr_setclock(pthread_condattr_t*, clockid_t);
int pthread_condattr_getclock(const pthread_condattr_t* __restrict, clockid_t* __restrict);

int pthread_rwlockattr_init(pthread_rwlockattr_t*);
int pthread_rwlockattr_destroy(pthread_rwlockattr_t*);

int pthread_barrierattr_destroy(pthread_barrierattr_t*);
int pthread_barrierattr_init(pthread_barrierattr_t*);

int pthread_atfork(void (*)(void), void (*)(void), void (*)(void));

int pthread_getconcurrency(void);
int pthread_setconcurrency(int);

int pthread_getcpuclockid(pthread_t, clockid_t*);

#define pthread_cleanup_push(f, x)
#define pthread_cleanup_pop(r)

#ifdef _GNU_SOURCE
struct cpu_set_t;
int pthread_getaffinity_np(pthread_t, size_t, struct cpu_set_t*);
int pthread_setaffinity_np(pthread_t, size_t, const struct cpu_set_t*);
int pthread_getattr_np(pthread_t, pthread_attr_t*);
#endif

#ifdef __cplusplus
}
#endif
