#ifndef SYSROOT_PTHREAD_H_
#define SYSROOT_PTHREAD_H_

#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 <sched.h>
#include <time.h>

#include <bits/alltypes.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

#endif  // SYSROOT_PTHREAD_H_
