IO-AIO
view release on metacpan or search on metacpan
PPCODE:
{
int fd = s_fileno_croak (fh, 0);
dREQ;
req->type = EIO_CUSTOM;
req->sv1 = newSVsv (fh);
req->int1 = fd;
req->feed = fiemap;
#if HAVE_FIEMAP
/* keep our fingers crossed that the next two types are 64 bit */
req->offs = start;
req->size = SvOK (length) ? SvVAL64 (length) : ~0ULL;
req->int2 = flags;
req->int3 = SvOK (count) ? SvIV (count) : -1;
#endif
REQ_SEND;
}
void
aio_slurp (SV *pathname, off_t offset, UV length, SV8 *data, SV *callback = &PL_sv_undef)
PPCODE:
{
char *svptr = 0;
sv_clear_foreign (data);
if (length) /* known length, directly read into scalar */
{
if (!SvPOK (data) || SvLEN (data) >= SvCUR (data))
svptr = sv_grow (data, length + 1);
else if (SvCUR (data) < length)
croak ("length outside of scalar, and cannot grow");
else
svptr = SvPVbyte_nolen (data);
}
{
dREQ;
req->type = EIO_SLURP;
req_set_path1 (req, pathname);
req->offs = offset;
req->size = length;
req->sv2 = SvREFCNT_inc (data);
req->ptr2 = svptr;
if (!SvREADONLY (data))
{
SvREADONLY_on (data);
req->flags |= FLAG_SV2_RO_OFF;
}
REQ_SEND;
}
}
void
aio_busy (double delay, SV *callback = &PL_sv_undef)
PPCODE:
{
dREQ;
req->type = EIO_BUSY;
req->nv1 = delay < 0. ? 0. : delay;
REQ_SEND;
}
void
aio_group (SV *callback = &PL_sv_undef)
PPCODE:
{
dREQ;
req->type = EIO_GROUP;
PUTBACK;
req_submit (req);
SPAGAIN;
XPUSHs (req_sv (req, aio_grp_stash));
}
void
aio_nop (SV *callback = &PL_sv_undef)
ALIAS:
aio_nop = EIO_NOP
aio_sync = EIO_SYNC
PPCODE:
{
dREQ;
req->type = ix;
REQ_SEND;
}
int
aioreq_pri (int pri = NO_INIT)
CODE:
RETVAL = next_pri;
if (items > 0)
{
if (pri < EIO_PRI_MIN) pri = EIO_PRI_MIN;
if (pri > EIO_PRI_MAX) pri = EIO_PRI_MAX;
next_pri = pri;
}
OUTPUT:
RETVAL
void
aioreq_nice (int nice = 0)
CODE:
nice = next_pri - nice;
if (nice < EIO_PRI_MIN) nice = EIO_PRI_MIN;
if (nice > EIO_PRI_MAX) nice = EIO_PRI_MAX;
next_pri = nice;
( run in 1.919 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )