#ifndef SYSROOT_THREADS_H_
#define SYSROOT_THREADS_H_

#include <features.h>
#include <time.h>

#ifdef __cplusplus
extern "C" {
typedef unsigned long thrd_t;
#else
typedef struct __pthread* thrd_t;
#define thread_local _Thread_local
#endif

typedef unsigned tss_t;
typedef int (*thrd_start_t)(void*);
typedef void (*tss_dtor_t)(void*);

#define __NEED_cnd_t
#define __NEED_mtx_t
#define __NEED_once_flag

#include <bits/alltypes.h>

#define TSS_DTOR_ITERATIONS 4

enum {
    thrd_success = 0,
    thrd_busy = 1,
    thrd_error = 2,
    thrd_nomem = 3,
    thrd_timedout = 4,
};

// These are bitfield values; initialize with e.g. (mtx_plain|mtx_timed).
// mtx_recursive is not implemented.
enum {
    mtx_plain = 0,
    mtx_recursive = 1,
    mtx_timed = 2,
};

#ifdef _ALL_SOURCE
#define MTX_INIT \
    {}
#define CND_INIT \
    {}
#endif

#define ONCE_FLAG_INIT 0

int thrd_create(thrd_t*, thrd_start_t, void*);
#ifdef _ALL_SOURCE
// |name| is silently truncated to a maximum of ZX_MAX_NAME_LEN-1 characters.
int thrd_create_with_name(thrd_t*, thrd_start_t, void*, const char* name);
#endif
_Noreturn void thrd_exit(int);

int thrd_detach(thrd_t);
int thrd_join(thrd_t, int*);

int thrd_sleep(const struct timespec*, struct timespec*);
void thrd_yield(void);

thrd_t thrd_current(void);
int thrd_equal(thrd_t, thrd_t);
#ifndef __cplusplus
#define thrd_equal(A, B) ((A) == (B))
#endif

void call_once(once_flag*, void (*)(void));

int mtx_init(mtx_t*, int);
void mtx_destroy(mtx_t*);

int mtx_lock(mtx_t* __m)
#ifdef __clang__
    __attribute__((__acquire_capability__(__m)))
#endif
    ;
int mtx_timedlock(mtx_t* __restrict, const struct timespec* __restrict);
int mtx_trylock(mtx_t*);
int mtx_unlock(mtx_t* __m)
#ifdef __clang__
    __attribute__((__release_capability__(__m)))
#endif
    ;

int cnd_init(cnd_t*);
void cnd_destroy(cnd_t*);

int cnd_broadcast(cnd_t*);
int cnd_signal(cnd_t*);

int cnd_timedwait(cnd_t* __restrict, mtx_t* __restrict, const struct timespec* __restrict);
int cnd_wait(cnd_t*, mtx_t*);

int tss_create(tss_t*, tss_dtor_t);
void tss_delete(tss_t key);

int tss_set(tss_t, void*);
void* tss_get(tss_t);

#ifdef __cplusplus
}
#endif

#endif // SYSROOT_THREADS_H_
