1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
#ifdef __MINGW32__
#ifndef __USE_MINGW_ANSI_STDIO
#define __USE_MINGW_ANSI_STDIO 1
#endif
#endif
#define PERL_NO_GET_CONTEXT 1
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#include "../math_mpfr_include.h"
#ifdef OLDPERL
#define SvUOK SvIsUV
#endif
#ifndef Newx
# define Newx(v,n,t) New(0,v,n,t)
#endif
#ifndef mp_prec_t
#define mp_prec_t mpfr_prec_t
#endif
SV * prec_cast(pTHX_ SV * iv) {
mp_prec_t * p;
SV * obj_ref, * obj;
if(!SvIOK(iv)) croak("Arg supplied to Math::MPFR::Prec::prec_cast must be an IV/UV");
Newx(p, 1, mp_prec_t);
if(p == NULL) croak("Failed to allocate memory in Math::MPFR::Prec::prec_cast function");
obj_ref = newSV(0);
obj = newSVrv(obj_ref, "Math::MPFR::Prec");
*p = (mp_prec_t)SvUVX(iv);
sv_setiv(obj, INT2PTR(IV,p));
SvREADONLY_on(obj);
return obj_ref;
}
int _PREC_MIN(void) {
/* Used by MPFR.pm to set the constant PREC_MIN */
return (int)MPFR_PREC_MIN;
}
void DESTROY(pTHX_ SV * rop) {
Safefree(INT2PTR(mp_prec_t *, SvIVX(SvRV(rop))));
}
MODULE = Math::MPFR::Prec PACKAGE = Math::MPFR::Prec
PROTOTYPES: DISABLE
SV *
prec_cast (iv)
SV * iv
CODE:
RETVAL = prec_cast (aTHX_ iv);
OUTPUT: RETVAL
int
_PREC_MIN ()
void
DESTROY (rop)
SV * rop
PPCODE:
DESTROY(aTHX_ rop);
XSRETURN_EMPTY; /* return empty stack */
|