Coro-LocalScalar-XS
view release on metacpan or search on metacpan
static int localized_read (pTHX_ SV* sv, MAGIC* mg) {
if(disable_magick){
return 0;
}
SV** local_value = hv_fetch( get_local_storage() , (char *) sv, sizeof(SV*), 0);
sv_setsv(sv,
local_value ? *local_value : &PL_sv_undef
);
return 0;
}
static int localized_write (pTHX_ SV* sv, MAGIC* mg) {
if(disable_magick){
return 0;
}
hv_store( get_local_storage() , (char *) sv, sizeof(SV*) , newSVsv(sv) , 0);
return 0;
}
static MGVTBL vtbl = {
localized_read,
localized_write,
};
MODULE = Coro::LocalScalar::XS PACKAGE = Coro::LocalScalar::XS
PROTOTYPES: DISABLE
BOOT:
I_CORO_API ("Coro::LocalScalar::XS");
data_hash = newHV();
void
_init (sv)
SV* sv
CODE:
sv_magicext (sv, 0, PERL_MAGIC_ext, &vtbl, (const char*) 0 , 0);
HV*
_get_data_hash()
CODE:
RETVAL = (HV*) SvREFCNT_inc((SV*)data_hash);
OUTPUT:
RETVAL
void
cleanup(coro)
SV* coro
CODE:
hv_delete(data_hash, (char *) SvRV(coro), sizeof(HV*), G_DISCARD);
disable_magick = 1;
void
reenable_magick()
CODE:
disable_magick = 0;
( run in 0.468 second using v1.01-cache-2.11-cpan-ceb78f64989 )