Coro
view release on metacpan or search on metacpan
Coro/State.xs view on Meta::CPAN
cctx_idle ()
PROTOTYPE:
CODE:
RETVAL = cctx_idle;
OUTPUT:
RETVAL
void
list ()
PROTOTYPE:
PPCODE:
{
struct coro *coro;
for (coro = coro_first; coro; coro = coro->next)
if (coro->hv)
XPUSHs (sv_2mortal (newRV_inc ((SV *)coro->hv)));
}
void
call (Coro::State coro, SV *coderef)
ALIAS:
Coro/State.xs view on Meta::CPAN
coro_times_update ();
(enabled ? coro_times_sub : coro_times_add)(SvSTATE (coro_current));
}
}
OUTPUT:
RETVAL
void
times (Coro::State self)
PPCODE:
{
struct coro *current = SvSTATE (coro_current);
if (ecb_expect_false (current == self))
{
coro_times_update ();
coro_times_add (SvSTATE (coro_current));
}
EXTEND (SP, 2);
Coro/State.xs view on Meta::CPAN
self->flags &= ~CF_SUSPENDED;
void
_pool_handler (...)
CODE:
CORO_EXECUTE_SLF_XS (slf_init_pool_handler);
void
async_pool (SV *cv, ...)
PROTOTYPE: &@
PPCODE:
{
HV *hv = (HV *)av_pop (av_async_pool);
AV *av = newAV ();
SV *cb = ST (0);
int i;
av_extend (av, items - 2);
for (i = 1; i < items; ++i)
av_push (av, SvREFCNT_inc_NN (ST (i)));
Coro/State.xs view on Meta::CPAN
rouse_cb ()
PROTOTYPE:
CODE:
RETVAL = coro_new_rouse_cb (aTHX);
OUTPUT:
RETVAL
void
rouse_wait (...)
PROTOTYPE: ;$
PPCODE:
CORO_EXECUTE_SLF_XS (slf_init_rouse_wait);
void
on_enter (SV *block)
ALIAS:
on_leave = 1
PROTOTYPE: &
CODE:
{
struct coro *coro = SvSTATE_current;
Coro/State.xs view on Meta::CPAN
CODE:
CORO_EXECUTE_SLF_XS (slf_init_semaphore_down);
void
wait (...)
CODE:
CORO_EXECUTE_SLF_XS (slf_init_semaphore_wait);
void
try (SV *self)
PPCODE:
{
AV *av = (AV *)SvRV (self);
SV *count_sv = AvARRAY (av)[0];
IV count = SvIVX (count_sv);
if (count > 0)
{
--count;
SvIVX (count_sv) = count;
XSRETURN_YES;
}
else
XSRETURN_NO;
}
void
waiters (SV *self)
PPCODE:
{
AV *av = (AV *)SvRV (self);
int wcount = AvFILLp (av) + 1 - 1;
if (GIMME_V == G_SCALAR)
XPUSHs (sv_2mortal (newSViv (wcount)));
else
{
int i;
EXTEND (SP, wcount);
for (i = 1; i <= wcount; ++i)
PUSHs (sv_2mortal (newRV_inc (AvARRAY (av)[i])));
}
}
MODULE = Coro::State PACKAGE = Coro::SemaphoreSet
void
_may_delete (SV *sem, int count, unsigned int extra_refs)
PPCODE:
{
AV *av = (AV *)SvRV (sem);
if (SvREFCNT ((SV *)av) == 1 + extra_refs
&& AvFILLp (av) == 0 /* no waiters, just count */
&& SvIV (AvARRAY (av)[0]) == count)
XSRETURN_YES;
XSRETURN_NO;
}
Coro/State.xs view on Meta::CPAN
NV
time ()
CODE:
RETVAL = nvtime (aTHX);
OUTPUT:
RETVAL
NV
gettimeofday ()
PPCODE:
{
UV tv [2];
u2time (aTHX_ tv);
EXTEND (SP, 2);
PUSHs (sv_2mortal (newSVuv (tv [0])));
PUSHs (sv_2mortal (newSVuv (tv [1])));
}
( run in 1.253 second using v1.01-cache-2.11-cpan-71847e10f99 )