Datum spheretrans_invert(PG_FUNCTION_ARGS) { SEuler * se = ( SEuler * ) PG_GETARG_POINTER ( 0 ) ; SEuler * ret = ( SEuler * ) MALLOC ( sizeof ( SEuler ) ); spheretrans_inverse ( ret , se ); PG_RETURN_POINTER ( ret ); }
Datum spheretrans_trans_inv(PG_FUNCTION_ARGS) { SEuler * se1 = ( SEuler * ) PG_GETARG_POINTER ( 0 ) ; SEuler * se2 = ( SEuler * ) PG_GETARG_POINTER ( 1 ) ; SEuler * out = ( SEuler * ) MALLOC ( sizeof( SEuler ) ); SEuler tmp ; spheretrans_inverse ( &tmp , se2 ); seuler_trans_zxz ( out , se1, &tmp ); PG_RETURN_POINTER ( spheretrans_check(out) ); }
Datum spheretrans_point_inverse(PG_FUNCTION_ARGS) { Datum sp = PG_GETARG_DATUM(0); SEuler *se = (SEuler *) PG_GETARG_POINTER(1); SEuler tmp; Datum ret; spheretrans_inverse(&tmp, se); ret = DirectFunctionCall2(spheretrans_point, sp, PointerGetDatum(&tmp)); PG_RETURN_DATUM(ret); }