#ifndef __HEV_TASK_H__
#define __HEV_TASK_H__
#include <poll.h>
#ifdef __cplusplus
extern "C" {
#endif
#define HEV_TASK_PRIORITY_MIN (0)
#define HEV_TASK_PRIORITY_MAX (15)
#define HEV_TASK_PRIORITY_HIGH HEV_TASK_PRIORITY_MIN
#define HEV_TASK_PRIORITY_LOW HEV_TASK_PRIORITY_MAX
#define HEV_TASK_PRIORITY_DEFAULT (8)
#define HEV_TASK_PRIORITY_REALTIME (0)
typedef struct _HevTask HevTask;
typedef void (*HevTaskEntry) (void *data);
typedef enum
{
HEV_TASK_STOPPED,
HEV_TASK_RUNNING,
HEV_TASK_WAITING,
} HevTaskState;
typedef enum
{
HEV_TASK_YIELD = 1,
HEV_TASK_WAITIO,
HEV_TASK_YIELD_COUNT,
} HevTaskYieldType;
HevTask *hev_task_new (int stack_size);
HevTask *hev_task_ref (HevTask *self);
void hev_task_unref (HevTask *self);
HevTask *hev_task_self (void);
HevTaskState hev_task_get_state (HevTask *self);
void hev_task_set_priority (HevTask *self, int priority);
int hev_task_get_priority (HevTask *self);
int hev_task_add_fd (HevTask *self, int fd, unsigned int events);
int hev_task_mod_fd (HevTask *self, int fd, unsigned int events);
int hev_task_del_fd (HevTask *self, int fd);
void hev_task_wakeup (HevTask *task);
void hev_task_yield (HevTaskYieldType type);
unsigned int hev_task_sleep (unsigned int milliseconds);
unsigned int hev_task_usleep (unsigned int microseconds);
void hev_task_run (HevTask *self, HevTaskEntry entry, void *data);
void hev_task_exit (void);
void *hev_task_get_data (HevTask *self);
#ifdef __cplusplus
}
#endif
#endif