__compar_d_fn_t					T_PTROBJ
__compar_fn_t					T_PTROBJ
__extension__ extern lldiv_t			T_PTROBJ
__extension__ extern long long int		T_PTROBJ
__extension__ extern unsigned int		T_PTROBJ
__extension__ extern unsigned long long int	T_PTROBJ
__locale_t					T_PTROBJ
char * __restrict				T_PTROBJ
char * const * __restrict			T_PTROBJ
char ** __restrict				T_PTROBJ
const __sigset_t * __restrict			T_OPAQUE_STRUCT
const char *					T_PTROBJ
const char * __restrict				T_PTROBJ
const cpArbiter *				T_PTROBJ
const cpBB						T_OPAQUE_STRUCT
const cpBody *					T_PTROBJ
const cpConstraint *					T_PTROBJ
const cpConstraintClass *			T_PTROBJ
const cpFloat						T_DOUBLE
const cpShape *					T_PTROBJ
const cpVect *					T_PTROBJ
const cpVect 					T_OPAQUE_STRUCT
const cpSpace *					T_PTROBJ
const struct timespec * __restrict		T_PTROBJ
const void *					T_PTROBJ
const wchar_t * __restrict			T_PTROBJ
cpArbiter *					T_PTROBJ
cpBB						T_OPAQUE_STRUCT
cpBBTree *					T_PTROBJ
cpBBTreeVelocityFunc				T_PTROBJ
cpBitmask                           T_UV
cpBody *					T_PTROBJ
cpBody **					T_PTROBJ
cpBodyType                  T_OPAQUE_STRUCT
cpBodyArbiterIteratorFunc			T_PTROBJ
cpBodyConstraintIteratorFunc			T_PTROBJ
cpBodyPositionFunc          T_OPAQUE_STRUCT
cpBodyShapeIteratorFunc				T_PTROBJ
cpBodyVelocityFunc          T_OPAQUE_STRUCT
cpBool						T_BOOL
cpCircleShape *					T_PTROBJ
cpCollisionBeginFunc				T_PTROBJ
cpCollisionHandler *                T_PTROBJ
cpCollisionPostSolveFunc			T_PTROBJ
cpCollisionPreSolveFunc				T_PTROBJ
cpCollisionSeparateFunc				T_PTROBJ
cpCollisionType					T_UV
cpConstraint *					T_PTROBJ
cpConstraintPreSolveFunc        T_OPAQUE_STRUCT
cpConstraintPostSolveFunc       T_OPAQUE_STRUCT
cpContactPointSet				T_OPAQUE_STRUCT
cpContactPointSet *				T_PTROBJ
cpDataPointer                   T_OPAQUE_STRUCT
cpDampedRotarySpring *				T_PTROBJ
cpDampedRotarySpringTorqueFunc  T_OPAQUE_STRUCT
cpDampedSpring *				T_PTROBJ
cpDampedSpringForceFunc         T_OPAQUE_STRUCT
cpFloat						T_DOUBLE
cpHashValue                     T_UV
cpGearJoint *					T_PTROBJ
cpGrooveJoint *					T_PTROBJ
cpGroup						T_UV
cpNearestPointQueryInfo *			T_PTROBJ
cpPinJoint *					T_PTROBJ
cpPivotJoint *					T_PTROBJ
cpPointQueryInfo *              T_PTROBJ
cpPolyShape *					T_PTROBJ
cpPostStepFunc					T_PTROBJ
cpRatchetJoint *				T_PTROBJ
cpRotaryLimitJoint *				T_PTROBJ
cpSegmentQueryInfo *				T_PTROBJ
cpSegmentShape *				T_PTROBJ
cpShape *					T_PTROBJ
cpShape **					T_PTROBJ
cpSimpleMotor *					T_PTROBJ
cpSlideJoint *					T_PTROBJ
cpSpaceBBQueryFunc				T_PTROBJ
cpSpaceBodyIteratorFunc				T_PTROBJ
cpSpaceConstraintIteratorFunc			T_PTROBJ
cpSpaceDebugDrawOptions *       T_PTROBJ
cpSpaceHash *					T_PTROBJ
cpSpaceNearestPointQueryFunc			T_PTROBJ
cpSpacePointQueryFunc				T_PTROBJ
cpSpaceSegmentQueryFunc				T_PTROBJ
cpSpaceShapeIteratorFunc			T_PTROBJ
cpSpaceShapeQueryFunc				T_PTROBJ
cpSpatialIndex *				T_PTROBJ
cpSpatialIndexBBFunc				T_PTROBJ
cpSpatialIndexQueryFunc				T_PTROBJ
cpSweep1D *					T_PTROBJ
cpTimestamp                 T_OPAQUE_STRUCT
cpTransform                 T_OPAQUE_STRUCT
cpVect						T_OPAQUE_STRUCT
cpVect *					T_PTROBJ
cpSpace						T_OPAQUE_STRUCT
cpSpace *					T_PTROBJ_STRUCT
cpShapeFilter               T_OPAQUE_STRUCT
cpSegmentQueryInfo *        T_PTROBJ_STRUCT
div_t						T_OPAQUE_STRUCT
double *					T_PTROBJ
double * __restrict				T_PTROBJ
fd_set * __restrict				T_OPAQUE_STRUCT
float *						T_PTROBJ
int *						T_PTROBJ
int * __restrict				T_PTROBJ
int32_t * __restrict				T_PTROBJ
ldiv_t						T_OPAQUE_STRUCT
long double					T_NV
long double *					T_PTROBJ
long int					T_PTROBJ
long int * __restrict				T_PTROBJ
long long int					T_PTROBJ
struct drand48_data *				T_PTROBJ
struct drand48_data * __restrict		T_OPAQUE_STRUCT
struct exception *				T_PTROBJ
struct random_data *				T_PTROBJ
struct random_data * __restrict			T_OPAQUE_STRUCT
struct timeval * __restrict			T_OPAQUE_STRUCT
unsigned int *					T_PTROBJ
unsigned long int				T_PTROBJ
unsigned long long int				T_PTROBJ
unsigned short int				T_PTROBJ
unsigned short int *				T_PTROBJ
void ( * __func ) ( int __status, void * __arg )	T_PTROBJ
void ( * __func ) ( void )			T_PTROBJ
void **						T_PTROBJ
wchar_t * __restrict				T_PTROBJ
#############################################################################
INPUT
T_OPAQUE_STRUCT
	if (sv_derived_from($arg, \"Games::Chipmunk::${ntype}\")) {
	    STRLEN len;
	    char  *s = SvPV((SV*)SvRV($arg), len);

	    if (len != sizeof($var))
		croak(\"Size %d of packed data != expected %d\",
			len, sizeof($var));
	    $var = *($type *)s;
	}
	else
	    croak(\"$var is not of type ${ntype}\")

T_PTROBJ_STRUCT
	if (sv_derived_from($arg, \"Games::Chipmunk::${ntype}\")) {
	    STRLEN len;
	    char  *s = SvPV((SV*)SvRV($arg), len);

	    if (len != sizeof($var))
		croak(\"Size %d of packed data != expected %d\",
			len, sizeof($var));
	    $var = *($type *)s;
	}
	else
	    croak(\"$var is not of type ${ntype}\")
#############################################################################
OUTPUT
T_OPAQUE_STRUCT
	sv_setref_pvn($arg, \"Games::Chipmunk::${ntype}\",
        (char *)&$var, sizeof($var));

T_PTROBJ_STRUCT
	sv_setref_pvn($arg, \"Games::Chipmunk::${ntype}\",
        (char *)&$var, sizeof($var));
