1 |
#ifndef EV_API_H |
2 |
#define EV_API_H |
3 |
|
4 |
#include "EXTERN.h" |
5 |
#include "perl.h" |
6 |
#include "XSUB.h" |
7 |
|
8 |
#ifndef pTHX_ |
9 |
# define pTHX_ |
10 |
# define aTHX_ |
11 |
# define pTHX |
12 |
# define aTHX |
13 |
#endif |
14 |
|
15 |
#include <event.h> |
16 |
|
17 |
struct EVAPI { |
18 |
I32 ver; |
19 |
I32 rev; |
20 |
#define EV_API_VERSION 1 |
21 |
#define EV_API_REVISION 0 |
22 |
|
23 |
/* return the current wallclock time */ |
24 |
double (*now)(void); |
25 |
|
26 |
/* wait for a single event, without registering an event watcher */ |
27 |
/* if timeout is < 0, do wait indefinitely */ |
28 |
void (*once)(int fd, short events, double timeout, void (*cb)(int, short, void *), void *arg); |
29 |
}; |
30 |
|
31 |
/* |
32 |
* usage examples: |
33 |
* |
34 |
* now = GEVAPI->now (); |
35 |
* GEVAPI->once (5, EV_READ, 60, my_cb, (void *)mysv); |
36 |
*/ |
37 |
|
38 |
static struct EVAPI *GEVAPI; |
39 |
|
40 |
#define I_EV_API(YourName) \ |
41 |
STMT_START { \ |
42 |
SV *sv = perl_get_sv ("EV::API", 0); \ |
43 |
if (!sv) croak ("EV::API not found"); \ |
44 |
GEVAPI = (struct CoroAPI*) SvIV (sv); \ |
45 |
if (GEVAPI->ver != EV_API_VERSION \ |
46 |
|| GEVAPI->rev < EV_API_REVISION) \ |
47 |
croak ("EV::API version mismatch (%d.%d vs. %d.%d) -- please recompile %s", \ |
48 |
GEVAPI->ver, GEVAPI->rev, EV_API_VERSION, EV_API_REVISION, YourName); \ |
49 |
} STMT_END |
50 |
|
51 |
#endif |
52 |
|