Coro-LocalScalar-XS

 view release on metacpan or  search on metacpan

XS.xs  view on Meta::CPAN



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 )