#ifndef __KERNEL_HANDLE_H
#define __KERNEL_HANDLE_H
#ifdef __cplusplus
extern "C"
{
#endif
#include <kernel/thread.h>
typedef struct handle_t handle_t;
struct handle_t
{
handle_t *next;
bool signal;
byte refs;
struct process_t* process;
const char* file;
int line;
thread_queue_t queue;
};
void* _hndAlloc(size_t size, struct process_t* proc, const char* file, int line);
#define hndAlloc(size, proc) _hndAlloc(size, proc, __FILE__, __LINE__);
int hndAddRef(void* buf);
int hndFree(void* buf);
void hndSignal(void* buf, bool signal);
bool hndIsSignalled(void* buf);
void hndEnum(struct process_t* proc);
#define hndHandle(buf) ((handle_t*) (buf) - 1)
#ifdef __cplusplus
}
#endif
#endif