TYPEMAP
Apache			T_APACHEOBJ
Apache::CmdParms	T_PTROBJ
Apache::SubRequest	T_PTROBJ
Apache::Connection	T_PTROBJ
Apache::Server		T_PTROBJ
Apache::ModuleConfig    T_PTROBJ
Apache::Module		T_PTROBJ
Apache::Handler		T_PTROBJ
Apache::Command		T_PTROBJ
Apache::Table		T_TABLEOBJ
Apache::table		T_PTROBJ
pid_t			T_IV
uid_t			T_IV
gid_t			T_IV
Apache::Scoreboard      O_HvRV
Apache::URI		T_PTROBJ    
STRLEN                  T_UV

# "perlobject.map"  Dean Roehrich, version 19960302
#
# TYPEMAPs
#
# HV *		-> unblessed Perl HV object.
# AV *		-> unblessed Perl AV object.
#
# INPUT/OUTPUT maps
#
# O_*		-> opaque blessed objects
# T_*		-> opaque blessed or unblessed objects
#
# O_OBJECT	-> link an opaque C or C++ object to a blessed Perl object.
# T_OBJECT	-> link an opaque C or C++ object to an unblessed Perl object.
# O_HvRV	-> a blessed Perl HV object.
# T_HvRV	-> an unblessed Perl HV object.
# O_AvRV	-> a blessed Perl AV object.
# T_AvRV	-> an unblessed Perl AV object.

#TYPEMAP

HV *		T_HvRV
AV *		T_AvRV
const char *		T_PV

######################################################################
OUTPUT

T_APACHEOBJ
	sv_setref_pv($arg, \"${ntype}\", (void*)$var);

T_TABLEOBJ
	sv_setref_pv($arg, \"${ntype}\", (void*)$var);

T_PV_CONST
	SvREADONLY_on((SV*)$arg);
	sv_setpv((SV*)$arg, (char *)$var);

# The Perl object is blessed into 'CLASS', which should be a
# char* having the name of the package for the blessing.
O_OBJECT
	sv_setref_pv( $arg, CLASS, (void*)$var );

T_OBJECT
	sv_setref_pv( $arg, Nullch, (void*)$var );

# Cannot use sv_setref_pv() because that will destroy
# the HV-ness of the object.  Remember that newRV() will increment
# the refcount.
O_HvRV
	$arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) );

T_HvRV
	$arg = newRV((SV*)$var);

# Cannot use sv_setref_pv() because that will destroy
# the AV-ness of the object.  Remember that newRV() will increment
# the refcount.
O_AvRV
	$arg = sv_bless( newRV((SV*)$var), gv_stashpv(CLASS,1) );

T_AvRV
	$arg = newRV((SV*)$var);


######################################################################
INPUT

T_APACHEOBJ
	r = sv2request_rec($arg, \"$ntype\", cv)

T_TABLEOBJ
	$var = ($type)hvrv2table($arg)

T_PV_CONST
	$var = ($type)SvPV($arg,na)

O_OBJECT
	if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVMG) )
		$var = ($type)SvIV((SV*)SvRV( $arg ));
	else{
		warn( \"${Package}::$func_name() -- $var is not a blessed SV reference\" );
		XSRETURN_UNDEF;
	}

T_OBJECT
	if( SvROK($arg) )
		$var = ($type)SvIV((SV*)SvRV( $arg ));
	else{
		warn( \"${Package}::$func_name() -- $var is not an SV reference\" );
		XSRETURN_UNDEF;
	}

O_HvRV
	if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
		$var = (HV*)SvRV( $arg );
	else {
		warn( \"${Package}::$func_name() -- $var is not a blessed HV reference\" );
		XSRETURN_UNDEF;
	}

T_HvRV
	if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVHV) )
		$var = (HV*)SvRV( $arg );
	else {
		warn( \"${Package}::$func_name() -- $var is not an HV reference\" );
		XSRETURN_UNDEF;
	}

O_AvRV
	if( sv_isobject($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
		$var = (AV*)SvRV( $arg );
	else {
		warn( \"${Package}::$func_name() -- $var is not a blessed AV reference\" );
		XSRETURN_UNDEF;
	}

T_AvRV
	if( SvROK($arg) && (SvTYPE(SvRV($arg)) == SVt_PVAV) )
		$var = (AV*)SvRV( $arg );
	else {
		warn( \"${Package}::$func_name() -- $var is not an AV reference\" );
		XSRETURN_UNDEF;
	}

