File: Prec.xs

package info (click to toggle)
libmath-mpfr-perl 4.45-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,716 kB
  • sloc: perl: 1,508; ansic: 517; makefile: 9
file content (80 lines) | stat: -rwxr-xr-x 1,333 bytes parent folder | download
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 */