ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.xs
(Generate patch)

Comparing EV/EV.xs (file contents):
Revision 1.108 by root, Sat Mar 22 13:42:45 2008 UTC vs.
Revision 1.112 by root, Tue May 20 23:49:41 2008 UTC

127 return SvIV (fh); 127 return SvIV (fh);
128 128
129 return -1; 129 return -1;
130} 130}
131 131
132static SV *
133e_get_cv (SV *cb_sv)
134{
135 HV *st;
136 GV *gvp;
137 CV *cv = sv_2cv (cb_sv, &st, &gvp, 0);
138
139 if (!cv)
140 croak ("EV watcher callback must be a CODE reference");
141
142 return (SV *)cv;
143}
144
132static void * 145static void *
133e_new (int size, SV *cb_sv, SV *loop) 146e_new (int size, SV *cb_sv, SV *loop)
134{ 147{
148 SV *cv = e_get_cv (cb_sv);
135 ev_watcher *w; 149 ev_watcher *w;
136 SV *self = NEWSV (0, size); 150 SV *self = NEWSV (0, size);
137 SvPOK_only (self); 151 SvPOK_only (self);
138 SvCUR_set (self, size); 152 SvCUR_set (self, size);
139 153
143 157
144 w->loop = SvREFCNT_inc (SvRV (loop)); 158 w->loop = SvREFCNT_inc (SvRV (loop));
145 w->e_flags = WFLAG_KEEPALIVE; 159 w->e_flags = WFLAG_KEEPALIVE;
146 w->data = 0; 160 w->data = 0;
147 w->fh = 0; 161 w->fh = 0;
148 w->cb_sv = SvTEMP (cb_sv) && SvREFCNT (cb_sv) == 1 ? SvREFCNT_inc (cb_sv) : newSVsv (cb_sv); 162 w->cb_sv = SvREFCNT_inc (cv);
149 w->self = self; 163 w->self = self;
150 164
151 return (void *)w; 165 return (void *)w;
152} 166}
153 167
390 evapi.sv_fileno = sv_fileno; 404 evapi.sv_fileno = sv_fileno;
391 evapi.sv_signum = sv_signum; 405 evapi.sv_signum = sv_signum;
392 evapi.supported_backends = ev_supported_backends (); 406 evapi.supported_backends = ev_supported_backends ();
393 evapi.recommended_backends = ev_recommended_backends (); 407 evapi.recommended_backends = ev_recommended_backends ();
394 evapi.embeddable_backends = ev_embeddable_backends (); 408 evapi.embeddable_backends = ev_embeddable_backends ();
395 evapi.time = ev_time; 409 evapi.time_ = ev_time;
396 evapi.sleep = ev_sleep; 410 evapi.sleep_ = ev_sleep;
397 evapi.loop_new = ev_loop_new; 411 evapi.loop_new = ev_loop_new;
398 evapi.loop_destroy = ev_loop_destroy; 412 evapi.loop_destroy = ev_loop_destroy;
399 evapi.loop_fork = ev_loop_fork; 413 evapi.loop_fork = ev_loop_fork;
400 evapi.loop_count = ev_loop_count; 414 evapi.loop_count = ev_loop_count;
401 evapi.now = ev_now; 415 evapi.now = ev_now;
703 RETVAL 717 RETVAL
704 718
705SV *cb (ev_watcher *w, SV *new_cb = 0) 719SV *cb (ev_watcher *w, SV *new_cb = 0)
706 CODE: 720 CODE:
707{ 721{
708 RETVAL = newSVsv (w->cb_sv);
709
710 if (items > 1) 722 if (items > 1)
711 sv_setsv (w->cb_sv, new_cb); 723 {
724 new_cb = e_get_cv (new_cb);
725 RETVAL = newRV_noinc (w->cb_sv);
726 w->cb_sv = SvREFCNT_inc (new_cb);
727 }
728 else
729 RETVAL = newRV_inc (w->cb_sv);
712} 730}
713 OUTPUT: 731 OUTPUT:
714 RETVAL 732 RETVAL
715 733
716SV *data (ev_watcher *w, SV *new_data = 0) 734SV *data (ev_watcher *w, SV *new_data = 0)
889 INIT: 907 INIT:
890 CHECK_REPEAT (repeat); 908 CHECK_REPEAT (repeat);
891 CODE: 909 CODE:
892 RESET (timer, w, (w, after, repeat)); 910 RESET (timer, w, (w, after, repeat));
893 911
894NV at (ev_timer *w)
895 CODE:
896 RETVAL = w->at;
897 OUTPUT:
898 RETVAL
899
900MODULE = EV PACKAGE = EV::Periodic PREFIX = ev_periodic_ 912MODULE = EV PACKAGE = EV::Periodic PREFIX = ev_periodic_
901 913
902void ev_periodic_start (ev_periodic *w) 914void ev_periodic_start (ev_periodic *w)
903 INIT: 915 INIT:
904 CHECK_REPEAT (w->interval); 916 CHECK_REPEAT (w->interval);
931 RESET (periodic, w, (w, at, interval, w->fh ? e_periodic_cb : 0)); 943 RESET (periodic, w, (w, at, interval, w->fh ? e_periodic_cb : 0));
932} 944}
933 945
934NV at (ev_periodic *w) 946NV at (ev_periodic *w)
935 CODE: 947 CODE:
936 RETVAL = w->at; 948 RETVAL = ev_periodic_at (w);
937 OUTPUT: 949 OUTPUT:
938 RETVAL 950 RETVAL
939 951
940MODULE = EV PACKAGE = EV::Idle PREFIX = ev_idle_ 952MODULE = EV PACKAGE = EV::Idle PREFIX = ev_idle_
941 953
1168 e_destroy (w); 1180 e_destroy (w);
1169 1181
1170void ev_async_send (ev_async *w) 1182void ev_async_send (ev_async *w)
1171 C_ARGS: e_loop (w), w 1183 C_ARGS: e_loop (w), w
1172 1184
1185SV *ev_async_async_pending (ev_async *w)
1186 CODE:
1187 RETVAL = boolSV (ev_async_pending (w));
1188 OUTPUT:
1189 RETVAL
1190
1173MODULE = EV PACKAGE = EV::Loop PREFIX = ev_ 1191MODULE = EV PACKAGE = EV::Loop PREFIX = ev_
1174 1192
1175SV *new (SV *klass, unsigned int flags = 0) 1193SV *new (SV *klass, unsigned int flags = 0)
1176 CODE: 1194 CODE:
1177{ 1195{

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines