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

Comparing EV/EV.xs (file contents):
Revision 1.93 by root, Thu Dec 20 09:26:40 2007 UTC vs.
Revision 1.99 by root, Fri Dec 21 05:30:25 2007 UTC

435#ifndef _WIN32 435#ifndef _WIN32
436 pthread_atfork (0, 0, ev_default_fork); 436 pthread_atfork (0, 0, ev_default_fork);
437#endif 437#endif
438} 438}
439 439
440SV *ev_default_loop (unsigned int flags = ev_supported_backends ()) 440SV *ev_default_loop (unsigned int flags = 0)
441 CODE: 441 CODE:
442{ 442{
443 if (!default_loop_sv) 443 if (!default_loop_sv)
444 { 444 {
445 evapi.default_loop = ev_default_loop (flags); 445 evapi.default_loop = ev_default_loop (flags);
603 ev_stat_set (RETVAL, SvPVbyte_nolen (RETVAL->fh), interval); 603 ev_stat_set (RETVAL, SvPVbyte_nolen (RETVAL->fh), interval);
604 if (!ix) START (stat, RETVAL); 604 if (!ix) START (stat, RETVAL);
605 OUTPUT: 605 OUTPUT:
606 RETVAL 606 RETVAL
607 607
608ev_embed *embed (struct ev_loop *loop, SV *cb) 608ev_embed *embed (struct ev_loop *loop, SV *cb = &PL_sv_undef)
609 ALIAS: 609 ALIAS:
610 embed_ns = 1 610 embed_ns = 1
611 CODE: 611 CODE:
612{
613 if (!(ev_backend (loop) & ev_embeddable_backends ()))
614 croak ("passed loop is not embeddable via EV::embed,");
615
612 RETVAL = e_new (sizeof (ev_embed), cb, default_loop_sv); 616 RETVAL = e_new (sizeof (ev_embed), cb, default_loop_sv);
613 RETVAL->fh = newSVsv (ST (0)); 617 RETVAL->fh = newSVsv (ST (0));
614 ev_embed_set (RETVAL, loop); 618 ev_embed_set (RETVAL, loop);
619
620 if (!SvOK (cb)) ev_set_cb (RETVAL, 0);
621
615 if (!ix) START (embed, RETVAL); 622 if (!ix) START (embed, RETVAL);
623}
616 OUTPUT: 624 OUTPUT:
617 RETVAL 625 RETVAL
618 626
619void once (SV *fh, int events, SV *timeout, SV *cb) 627void once (SV *fh, int events, SV *timeout, SV *cb)
620 CODE: 628 CODE:
679 { 687 {
680 SvREFCNT_dec (w->data); 688 SvREFCNT_dec (w->data);
681 w->data = newSVsv (new_data); 689 w->data = newSVsv (new_data);
682 } 690 }
683} 691}
692 OUTPUT:
693 RETVAL
694
695SV *loop (ev_watcher *w)
696 CODE:
697 RETVAL = newRV_inc (w->loop);
684 OUTPUT: 698 OUTPUT:
685 RETVAL 699 RETVAL
686 700
687int priority (ev_watcher *w, int new_priority = 0) 701int priority (ev_watcher *w, int new_priority = 0)
688 CODE: 702 CODE:
1101{ 1115{
1102 sv_setsv (w->fh, ST (1)); 1116 sv_setsv (w->fh, ST (1));
1103 RESET (embed, w, (w, loop)); 1117 RESET (embed, w, (w, loop));
1104} 1118}
1105 1119
1120SV *other (ev_embed *w)
1121 CODE:
1122 RETVAL = newSVsv (w->fh);
1123 OUTPUT:
1124 RETVAL
1125
1106MODULE = EV PACKAGE = EV::Loop PREFIX = ev_loop_ 1126MODULE = EV PACKAGE = EV::Loop PREFIX = ev_
1107 1127
1108SV *new (SV *klass, unsigned int flags = ev_supported_backends ()) 1128SV *new (SV *klass, unsigned int flags = 0)
1109 CODE: 1129 CODE:
1110{ 1130{
1111 struct ev_loop *loop = ev_loop_new (flags); 1131 struct ev_loop *loop = ev_loop_new (flags);
1112 1132
1113 if (!loop) 1133 if (!loop)
1114 XSRETURN_UNDEF; 1134 XSRETURN_UNDEF;
1115 1135
1116 RETVAL = sv_bless (newRV_noinc (newSViv (PTR2IV (evapi.default_loop))), stash_loop); 1136 RETVAL = sv_bless (newRV_noinc (newSViv (PTR2IV (loop))), stash_loop);
1117} 1137}
1118 OUTPUT: 1138 OUTPUT:
1119 RETVAL 1139 RETVAL
1120 1140
1121void DESTROY (struct ev_loop *loop) 1141void DESTROY (struct ev_loop *loop)
1122 CODE: 1142 CODE:
1123 if (loop != evapi.default_loop) /* global destruction sucks */ 1143 if (loop != evapi.default_loop) /* global destruction sucks */
1124 ev_loop_destroy (loop); 1144 ev_loop_destroy (loop);
1125 1145
1146void ev_loop_fork (struct ev_loop *loop)
1147
1148NV ev_now (struct ev_loop *loop)
1149
1150unsigned int ev_backend (struct ev_loop *loop)
1151
1152unsigned int ev_loop_count (struct ev_loop *loop)
1153
1154void ev_loop (struct ev_loop *loop, int flags = 0)
1155
1156void ev_unloop (struct ev_loop *loop, int how = 1)
1157
1158void ev_feed_fd_event (struct ev_loop *loop, int fd, int revents = EV_NONE)
1159
1160#if 0
1161
1162void ev_feed_signal_event (struct ev_loop *loop, SV *signal)
1163 CODE:
1164{
1165 Signal signum = sv_signum (signal);
1166 CHECK_SIG (signal, signum);
1167
1168 ev_feed_signal_event (loop, signum);
1169}
1170
1171#endif
1172
1173ev_io *io (struct ev_loop *loop, SV *fh, int events, SV *cb)
1174 ALIAS:
1175 io_ns = 1
1176 CODE:
1177{
1178 int fd = sv_fileno (fh);
1179 CHECK_FD (fh, fd);
1180
1181 RETVAL = e_new (sizeof (ev_io), cb, ST (0));
1182 RETVAL->fh = newSVsv (fh);
1183 ev_io_set (RETVAL, fd, events);
1184 if (!ix) START (io, RETVAL);
1185}
1186 OUTPUT:
1187 RETVAL
1188
1189ev_timer *timer (struct ev_loop *loop, NV after, NV repeat, SV *cb)
1190 ALIAS:
1191 timer_ns = 1
1192 INIT:
1193 CHECK_REPEAT (repeat);
1194 CODE:
1195 RETVAL = e_new (sizeof (ev_timer), cb, ST (0));
1196 ev_timer_set (RETVAL, after, repeat);
1197 if (!ix) START (timer, RETVAL);
1198 OUTPUT:
1199 RETVAL
1200
1201SV *periodic (struct ev_loop *loop, NV at, NV interval, SV *reschedule_cb, SV *cb)
1202 ALIAS:
1203 periodic_ns = 1
1204 INIT:
1205 CHECK_REPEAT (interval);
1206 CODE:
1207{
1208 ev_periodic *w;
1209 w = e_new (sizeof (ev_periodic), cb, ST (0));
1210 w->fh = SvTRUE (reschedule_cb) ? newSVsv (reschedule_cb) : 0;
1211 ev_periodic_set (w, at, interval, w->fh ? e_periodic_cb : 0);
1212 RETVAL = e_bless ((ev_watcher *)w, stash_periodic);
1213 if (!ix) START (periodic, w);
1214}
1215 OUTPUT:
1216 RETVAL
1217
1218#if 0
1219
1220ev_signal *signal (struct ev_loop *loop, SV *signal, SV *cb)
1221 ALIAS:
1222 signal_ns = 1
1223 CODE:
1224{
1225 Signal signum = sv_signum (signal);
1226 CHECK_SIG (signal, signum);
1227
1228 RETVAL = e_new (sizeof (ev_signal), cb, ST (0));
1229 ev_signal_set (RETVAL, signum);
1230 if (!ix) START (signal, RETVAL);
1231}
1232 OUTPUT:
1233 RETVAL
1234
1235#endif
1236
1237ev_idle *idle (struct ev_loop *loop, SV *cb)
1238 ALIAS:
1239 idle_ns = 1
1240 CODE:
1241 RETVAL = e_new (sizeof (ev_idle), cb, ST (0));
1242 ev_idle_set (RETVAL);
1243 if (!ix) START (idle, RETVAL);
1244 OUTPUT:
1245 RETVAL
1246
1247ev_prepare *prepare (struct ev_loop *loop, SV *cb)
1248 ALIAS:
1249 prepare_ns = 1
1250 CODE:
1251 RETVAL = e_new (sizeof (ev_prepare), cb, ST (0));
1252 ev_prepare_set (RETVAL);
1253 if (!ix) START (prepare, RETVAL);
1254 OUTPUT:
1255 RETVAL
1256
1257ev_check *check (struct ev_loop *loop, SV *cb)
1258 ALIAS:
1259 check_ns = 1
1260 CODE:
1261 RETVAL = e_new (sizeof (ev_check), cb, ST (0));
1262 ev_check_set (RETVAL);
1263 if (!ix) START (check, RETVAL);
1264 OUTPUT:
1265 RETVAL
1266
1267ev_fork *fork (struct ev_loop *loop, SV *cb)
1268 ALIAS:
1269 fork_ns = 1
1270 CODE:
1271 RETVAL = e_new (sizeof (ev_fork), cb, ST (0));
1272 ev_fork_set (RETVAL);
1273 if (!ix) START (fork, RETVAL);
1274 OUTPUT:
1275 RETVAL
1276
1277ev_child *child (struct ev_loop *loop, int pid, SV *cb)
1278 ALIAS:
1279 child_ns = 1
1280 CODE:
1281 RETVAL = e_new (sizeof (ev_child), cb, ST (0));
1282 ev_child_set (RETVAL, pid);
1283 if (!ix) START (child, RETVAL);
1284 OUTPUT:
1285 RETVAL
1286
1287ev_stat *stat (struct ev_loop *loop, SV *path, NV interval, SV *cb)
1288 ALIAS:
1289 stat_ns = 1
1290 CODE:
1291 RETVAL = e_new (sizeof (ev_stat), cb, ST (0));
1292 RETVAL->fh = newSVsv (path);
1293 ev_stat_set (RETVAL, SvPVbyte_nolen (RETVAL->fh), interval);
1294 if (!ix) START (stat, RETVAL);
1295 OUTPUT:
1296 RETVAL
1297
1298ev_embed *embed (struct ev_loop *loop, struct ev_loop *other, SV *cb = &PL_sv_undef)
1299 ALIAS:
1300 embed_ns = 1
1301 CODE:
1302{
1303 if (!(ev_backend (other) & ev_embeddable_backends ()))
1304 croak ("passed loop is not embeddable via EV::embed,");
1305
1306 RETVAL = e_new (sizeof (ev_embed), cb, ST (0));
1307 RETVAL->fh = newSVsv (ST (1));
1308 ev_embed_set (RETVAL, other);
1309
1310 if (!SvOK (cb)) ev_set_cb (RETVAL, 0);
1311
1312 if (!ix) START (embed, RETVAL);
1313}
1314 OUTPUT:
1315 RETVAL
1316
1317void once (struct ev_loop *loop, SV *fh, int events, SV *timeout, SV *cb)
1318 CODE:
1319 ev_once (
1320 loop,
1321 sv_fileno (fh), events,
1322 SvOK (timeout) ? SvNV (timeout) : -1.,
1323 e_once_cb,
1324 newSVsv (cb)
1325 );
1326

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines