ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV/EVAPI.h
Revision: 1.32
Committed: Sun Dec 9 19:46:55 2007 UTC (16 years, 5 months ago) by root
Content type: text/plain
Branch: MAIN
CVS Tags: rel-1_85, rel-1_8, rel-1_81, rel-1_86
Changes since 1.31: +4 -4 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.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 root 1.23 #define EV_COMMON \
16     int flags; /* cheap on 64 bit systems */ \
17     SV *self; /* contains this struct */ \
18 root 1.18 SV *cb_sv, *fh, *data;
19 root 1.7
20     #ifndef EV_PROTOTYPES
21     # define EV_PROTOTYPES 0
22     #endif
23    
24 root 1.14 #define EV_STANDALONE 1
25 root 1.12 #define EV_MULTIPLICITY 0
26    
27 root 1.4 #include <ev.h>
28 root 1.1
29     struct EVAPI {
30     I32 ver;
31     I32 rev;
32 root 1.32 #define EV_API_VERSION 3
33     #define EV_API_REVISION 0
34 root 1.1
35 root 1.4 /* perl fh or fd int to fd */
36     int (*sv_fileno) (SV *fh);
37     /* signal number/name to signum */
38     int (*sv_signum) (SV *fh);
39    
40     /* same as libev functions */
41 root 1.29 ev_tstamp (*now)(EV_P);
42 root 1.4 ev_tstamp (*(time))(void);
43 root 1.29 unsigned int (*backend)(EV_P);
44     void (*loop)(EV_P_ int flags);
45     void (*unloop)(EV_P_ int how);
46     void (*ref)(EV_P);
47     void (*unref)(EV_P);
48     void (*once)(EV_P_ int fd, int events, ev_tstamp timeout, void (*cb)(int revents, void *arg), void *arg);
49 root 1.32 int (*clear_pending)(EV_P_ void *);
50     void (*invoke)(EV_P_ void *, int);
51 root 1.30 void (*io_start)(EV_P_ ev_io *);
52     void (*io_stop) (EV_P_ ev_io *);
53     void (*timer_start)(EV_P_ ev_timer *);
54     void (*timer_stop) (EV_P_ ev_timer *);
55     void (*timer_again)(EV_P_ ev_timer *);
56     void (*periodic_start)(EV_P_ ev_periodic *);
57     void (*periodic_stop) (EV_P_ ev_periodic *);
58     void (*signal_start)(EV_P_ ev_signal *);
59     void (*signal_stop) (EV_P_ ev_signal *);
60     void (*child_start)(EV_P_ ev_child *);
61     void (*child_stop) (EV_P_ ev_child *);
62     void (*stat_start)(EV_P_ ev_stat *);
63     void (*stat_stop) (EV_P_ ev_stat *);
64     void (*stat_stat) (EV_P_ ev_stat *);
65     void (*idle_start)(EV_P_ ev_idle *);
66     void (*idle_stop) (EV_P_ ev_idle *);
67     void (*prepare_start)(EV_P_ ev_prepare *);
68     void (*prepare_stop) (EV_P_ ev_prepare *);
69     void (*check_start)(EV_P_ ev_check *);
70     void (*check_stop) (EV_P_ ev_check *);
71 root 1.1 };
72    
73 root 1.7 #if !EV_PROTOTYPES
74     # define sv_fileno(sv) GEVAPI->sv_fileno (sv)
75     # define sv_signum(sv) GEVAPI->sv_signum (sv)
76 root 1.28 # define ev_now(loop) GEVAPI->now (loop)
77 root 1.29 # define ev_time() GEVAPI->(time) ()
78 root 1.28 # define ev_backend(loop) GEVAPI->backend (loop)
79 root 1.7 # define ev_loop(flags) GEVAPI->loop (flags)
80 root 1.24 # define ev_unloop(how) GEVAPI->unloop (how)
81 root 1.7 # define ev_once(fd,events,timeout,cb,arg) GEVAPI->once ((fd), (events), (timeout), (cb), (arg))
82 root 1.10 # define ev_io_start(w) GEVAPI->io_start (w)
83     # define ev_io_stop(w) GEVAPI->io_stop (w)
84     # define ev_timer_start(w) GEVAPI->timer_start (w)
85     # define ev_timer_stop(w) GEVAPI->timer_stop (w)
86     # define ev_timer_again(w) GEVAPI->timer_again (w)
87     # define ev_periodic_start(w) GEVAPI->periodic_start (w)
88     # define ev_periodic_stop(w) GEVAPI->periodic_stop (w)
89     # define ev_signal_start(w) GEVAPI->signal_start (w)
90     # define ev_signal_stop(w) GEVAPI->signal_stop (w)
91     # define ev_idle_start(w) GEVAPI->idle_start (w)
92     # define ev_idle_stop(w) GEVAPI->idle_stop (w)
93     # define ev_prepare_start(w) GEVAPI->prepare_start (w)
94     # define ev_prepare_stop(w) GEVAPI->prepare_stop (w)
95     # define ev_check_start(w) GEVAPI->check_start (w)
96     # define ev_check_stop(w) GEVAPI->check_stop (w)
97     # define ev_child_start(w) GEVAPI->child_start (w)
98     # define ev_child_stop(w) GEVAPI->child_stop (w)
99 root 1.25 # define ev_stat_start(w) GEVAPI->stat_start (w)
100     # define ev_stat_stop(w) GEVAPI->stat_stop (w)
101     # define ev_stat_stat(w) GEVAPI->stat_stat (w)
102 root 1.28 # define ev_ref(loop) GEVAPI->ref (loop)
103     # define ev_unref(loop) GEVAPI->unref (loop)
104 root 1.30 # define ev_clear_pending(w) GEVAPI->clear_pending (w)
105 root 1.31 # define ev_invoke(w,rev) GEVAPI->invoke (w, rev)
106 root 1.7 #endif
107 root 1.2
108 root 1.1 static struct EVAPI *GEVAPI;
109    
110     #define I_EV_API(YourName) \
111     STMT_START { \
112     SV *sv = perl_get_sv ("EV::API", 0); \
113     if (!sv) croak ("EV::API not found"); \
114 root 1.5 GEVAPI = (struct EVAPI*) SvIV (sv); \
115 root 1.1 if (GEVAPI->ver != EV_API_VERSION \
116     || GEVAPI->rev < EV_API_REVISION) \
117     croak ("EV::API version mismatch (%d.%d vs. %d.%d) -- please recompile %s", \
118     GEVAPI->ver, GEVAPI->rev, EV_API_VERSION, EV_API_REVISION, YourName); \
119     } STMT_END
120    
121     #endif
122