#ifndef __AE_H__
#define __AE_H__
#define AE_OK 0
#define AE_ERR -1
#define AE_NONE 0
#define AE_READABLE 1
#define AE_WRITABLE 2
#define AE_ERROR 4
#define AE_HUP 8
#define AE_FILE_EVENTS 1
#define AE_TIME_EVENTS 2
#define AE_ALL_EVENTS (AE_FILE_EVENTS|AE_TIME_EVENTS)
#define AE_DONT_WAIT 4
#define AE_NOMORE -1
#define AE_NOTUSED(V) ((void) V)
typedef struct _aeFileEvent aeFileEvent;
typedef struct _aeEventLoop aeEventLoop;
typedef void aeFileProc(aeEventLoop *eventLoop, int fd, void *clientData, int mask);
typedef int aeTimeProc(aeEventLoop *eventLoop, long long id, void *clientData);
typedef void aeEventFinalizerProc(aeEventLoop *eventLoop, void *clientData);
typedef void aeBeforeSleepProc(aeEventLoop *eventLoop);
struct _aeFileEvent {
int mask;
aeFileProc *rfileProc;
aeFileProc *wfileProc;
void *clientData;
};
typedef struct _aeTimeEvent {
long long id;
long when_sec;
long when_ms;
aeTimeProc *timeProc;
aeEventFinalizerProc *finalizerProc;
void *clientData;
struct _aeTimeEvent *next;
} aeTimeEvent;
typedef struct _aeFiredEvent {
int fd;
int mask;
} aeFiredEvent;
struct _aeEventLoop {
int maxfd;
int setsize;
long long timeEventNextId;
time_t lastTime;
aeFileEvent *events;
aeFiredEvent *fired;
aeTimeEvent *timeEventHead;
int stop;
void *apidata;
aeBeforeSleepProc *beforesleep;
};
aeEventLoop *catAeCreateEventLoop(int setsize);
void catAeDeleteEventLoop(aeEventLoop *eventLoop);
void catAeStop(aeEventLoop *eventLoop);
int catAeCreateFileEvent(aeEventLoop *eventLoop, int fd, int mask,
aeFileProc *proc, void *clientData);
void catAeDeleteFileEvent(aeEventLoop *eventLoop, int fd, int mask);
int catAeGetFileEvents(aeEventLoop *eventLoop, int fd);
long long catAeCreateTimeEvent(aeEventLoop *eventLoop, long long milliseconds,
aeTimeProc *proc, void *clientData,
aeEventFinalizerProc *finalizerProc);
int catAeDeleteTimeEvent(aeEventLoop *eventLoop, long long id);
int catAeProcessEvents(aeEventLoop *eventLoop, int flags);
int catAeWait(int fd, int mask, long long milliseconds);
void catAeMain(aeEventLoop *eventLoop);
char *catAeGetApiName(void);
void catAeSetBeforeSleepProc(aeEventLoop *eventLoop, aeBeforeSleepProc *beforesleep);
int catAeGetSetSize(aeEventLoop *eventLoop);
int catAeResizeSetSize(aeEventLoop *eventLoop, int setsize);
#endif