TYPEMAP
context_p				T_CONTEXT
CV *					T_CODEREF
char *					T_CHARSTAR
int					T_INT

INPUT
T_CONTEXT
	if (sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG))
	{
		$var = ($type)SvIV((SV*)SvRV( $arg ));
		CLASS = HvNAME(SvSTASH(SvRV(ST(0))));
	}
	else
	{
		warn(\"${Package}::$func_name() -- $var is not blessed\");
		XSRETURN_UNDEF;
	}
T_CODEREF
	if ($arg == &PL_sv_undef)
	{
		ST(0) = sv_2mortal(newSViv(0));
		XSRETURN(1);
	}
	if (SvTYPE(SvRV($arg)) == SVt_PVCV)
		$var = (CV*)SvRV($arg);
	else
		croak(\"$var is not a code reference\")
T_CHARSTAR
	if ($arg == &PL_sv_undef)
	{
		ST(0) = sv_2mortal(newSViv(0));
		XSRETURN(1);
	}
	$var = (char *)SvPV($arg, PL_na);
T_INT
	if ($arg == &PL_sv_undef)
	{
		ST(0) = sv_2mortal(newSViv(0));
		XSRETURN(1);
	}
	$var = (int)SvIV($arg);

OUTPUT
T_CODEREF
	$arg = newRV((SV*)$var);
T_CONTEXT
	if (CLASS != NULL)
	{
		sv_setref_pv($arg, CLASS, (void*)$var);
	}
	else
	{
		sv_setref_pv($arg, TEMPLATE_PACKAGE, (void *)$var);
	}
T_CHARSTAR
	sv_setpv((SV *)$arg, $var);
T_INT
	sv_setiv($arg, (IV)$var);
