Lines Matching refs:sv
94 #define SvIsUV(sv) 0
97 #define SvUVX(sv) (croak("GMP: oops, shouldn't be using SvUVX"), 0)
300 /* Return a new mortal SV holding the given mpx_ptr pointer.
310 typedef SV *order_noswap;
311 typedef SV *dummy;
312 typedef SV *SV_copy_0;
317 #define SvMPX(s,type) ((type) SvIV((SV*) SvRV(s)))
323 #define MPX_ASSUME(x,sv,type) \
325 assert (sv_derived_from (sv, type##_class)); \
326 x = SvMPX(sv,type); \
329 #define MPZ_ASSUME(z,sv) MPX_ASSUME(z,sv,mpz)
330 #define MPQ_ASSUME(q,sv) MPX_ASSUME(q,sv,mpq)
331 #define MPF_ASSUME(f,sv) MPX_ASSUME(f,sv,mpf)
344 do { SV *__tmp = (x); (x) = (y); (y) = __tmp; } while (0)
350 class_or_croak (SV *sv, classconst char *cl)
352 if (! sv_derived_from (sv, cl))
406 my_##type##_set_svstr (type##_ptr x, SV *sv) \
411 assert (SvPOK(sv) || SvPOKp(sv)); \
412 str = SvPV (sv, len); \
513 use_sv (SV *sv)
517 if (SvGMAGICAL(sv))
519 mg_get(sv);
521 if (SvPOKp(sv))
524 if (SvIOKp(sv))
526 if (SvIsUV(sv))
528 if (SvNOKp(sv))
534 if (SvNOKp(sv))
540 if (SvNOKp(sv))
546 if (SvPOK(sv))
549 if (SvIOK(sv))
551 if (SvIsUV(sv))
553 if (SvNOK(sv))
558 d = SvNVX(sv);
562 d = SvNVX(sv);
570 if (SvNOK(sv))
575 d = SvNVX(sv);
579 d = SvNVX(sv);
587 if (SvNOK(sv))
591 if (SvROK(sv))
593 if (sv_derived_from (sv, mpz_class))
595 if (sv_derived_from (sv, mpq_class))
597 if (sv_derived_from (sv, mpf_class))
605 /* Coerce sv to an mpz. Use tmp to hold the converted value if sv isn't
607 the chosen mpz (tmp or the contents of sv). */
610 coerce_mpz_using (mpz_ptr tmp, SV *sv, int use)
614 mpz_set_si (tmp, SvIVX(sv));
618 mpz_set_ui (tmp, SvUVX(sv));
624 d = SvNVX(sv);
632 my_mpz_set_svstr (tmp, sv);
636 return SvMPZ(sv)->m;
640 mpq q = SvMPQ(sv);
648 mpf f = SvMPF(sv);
660 coerce_mpz (mpz_ptr tmp, SV *sv)
662 return coerce_mpz_using (tmp, sv, use_sv (sv));
666 /* Coerce sv to an mpq. If sv is an mpq then just return that, otherwise
670 coerce_mpq_using (mpq_ptr tmp, SV *sv, int use)
675 mpq_set_si (tmp, SvIVX(sv), 1L);
679 mpq_set_ui (tmp, SvUVX(sv), 1L);
683 mpq_set_d (tmp, SvNVX(sv));
687 my_mpq_set_svstr (tmp, sv);
691 mpq_set_z (tmp, SvMPZ(sv)->m);
695 return SvMPQ(sv)->m;
698 mpq_set_f (tmp, SvMPF(sv));
706 coerce_mpq (mpq_ptr tmp, SV *sv)
708 return coerce_mpq_using (tmp, sv, use_sv (sv));
713 my_mpf_set_sv_using (mpf_ptr f, SV *sv, int use)
717 mpf_set_si (f, SvIVX(sv));
721 mpf_set_ui (f, SvUVX(sv));
725 mpf_set_d (f, SvNVX(sv));
729 my_mpf_set_svstr (f, sv);
733 mpf_set_z (f, SvMPZ(sv)->m);
737 mpf_set_q (f, SvMPQ(sv)->m);
741 mpf_set (f, SvMPF(sv));
749 /* Coerce sv to an mpf. If sv is an mpf then just return that, otherwise
752 coerce_mpf_using (tmp_mpf_ptr tmp, SV *sv, unsigned long prec, int use)
755 return SvMPF(sv);
758 my_mpf_set_sv_using (tmp->m, sv, use);
762 coerce_mpf (tmp_mpf_ptr tmp, SV *sv, unsigned long prec)
764 return coerce_mpf_using (tmp, sv, prec, use_sv (sv));
772 coerce_mpf_pair (mpf *xp, SV *xv, mpf *yp, SV *yv)
800 coerce_ulong (SV *sv)
804 switch (use_sv (sv)) {
806 n = SvIVX(sv);
813 return SvUVX(sv);
818 d = SvNVX(sv);
821 n = SvIV(sv);
827 n = SvIV(sv);
832 mpz z = SvMPZ(sv);
840 mpq q = SvMPQ(sv);
850 mpf f = SvMPF(sv);
871 coerce_long (SV *sv)
873 switch (use_sv (sv)) {
875 return SvIVX(sv);
879 UV u = SvUVX(sv);
887 double d = SvNVX(sv);
890 return SvIV(sv);
895 return SvIV(sv);
899 mpz z = SvMPZ(sv);
907 mpq q = SvMPQ(sv);
917 mpf f = SvMPF(sv);
977 fits_slong_p (sv)
978 SV *sv
980 switch (use_sv (sv)) {
987 UV u = SvUVX(sv);
994 double d = SvNVX(sv);
1002 const char *str = SvPV (sv, len);
1017 RETVAL = mpz_fits_slong_p (SvMPZ(sv)->m);
1021 RETVAL = x_mpq_fits_slong_p (SvMPQ(sv)->m);
1025 RETVAL = mpf_fits_slong_p (SvMPF(sv));
1036 get_d (sv)
1037 SV *sv
1039 switch (use_sv (sv)) {
1041 RETVAL = (double) SvIVX(sv);
1045 RETVAL = (double) SvUVX(sv);
1049 RETVAL = SvNVX(sv);
1055 RETVAL = atof(SvPV(sv, len));
1060 RETVAL = mpz_get_d (SvMPZ(sv)->m);
1064 RETVAL = mpq_get_d (SvMPQ(sv)->m);
1068 RETVAL = mpf_get_d (SvMPF(sv));
1079 get_d_2exp (sv)
1080 SV *sv
1085 switch (use_sv (sv)) {
1087 ret = (double) SvIVX(sv);
1091 ret = (double) SvUVX(sv);
1097 ret = SvNVX(sv);
1107 my_mpf_set_svstr (tmp_mpf_0->m, sv);
1112 ret = mpz_get_d_2exp (&exp, SvMPZ(sv)->m);
1117 mpf_set_q (tmp_mpf_0->m, SvMPQ(sv)->m);
1122 ret = mpf_get_d_2exp (&exp, SvMPF(sv));
1133 get_si (sv)
1134 SV *sv
1136 switch (use_sv (sv)) {
1138 RETVAL = SvIVX(sv);
1142 RETVAL = SvUVX(sv);
1146 RETVAL = (long) SvNVX(sv);
1150 RETVAL = SvIV(sv);
1154 RETVAL = mpz_get_si (SvMPZ(sv)->m);
1158 mpz_set_q (tmp_mpz_0, SvMPQ(sv)->m);
1163 RETVAL = mpf_get_si (SvMPF(sv));
1174 get_str (sv, ...)
1175 SV *sv
1201 switch (use_sv (sv)) {
1203 mpz_set_si (tmp_mpz_0, SvIVX(sv));
1209 mpz_set_ui (tmp_mpz_0, SvUVX(sv));
1216 mpf_set_d (tmp_mpf_0->m, SvNVX(sv));
1224 str = SvPV (sv, len);
1253 z = SvMPZ(sv)->m;
1261 q = SvMPQ(sv)->m;
1267 f = SvMPF(sv);
1280 integer_p (sv)
1281 SV *sv
1283 switch (use_sv (sv)) {
1290 RETVAL = double_integer_p (SvNVX(sv));
1298 const char *str = SvPV (sv, len);
1318 RETVAL = x_mpq_integer_p (SvMPQ(sv)->m);
1322 RETVAL = mpf_integer_p (SvMPF(sv));
1333 sgn (sv)
1334 SV *sv
1336 switch (use_sv (sv)) {
1338 RETVAL = SGN (SvIVX(sv));
1342 RETVAL = (SvUVX(sv) > 0);
1346 RETVAL = SGN (SvNVX(sv));
1354 const char *str = SvPV (sv, len);
1370 RETVAL = mpz_sgn (SvMPZ(sv)->m);
1374 RETVAL = mpq_sgn (SvMPQ(sv)->m);
1378 RETVAL = mpf_sgn (SvMPF(sv));
1408 sprintf_internal (fmt, sv)
1410 SV *sv
1413 assert (SvROK(sv));
1414 assert ((sv_derived_from (sv, mpz_class) && fmt[strlen(fmt)-2] == 'Z')
1415 || (sv_derived_from (sv, mpq_class) && fmt[strlen(fmt)-2] == 'Q')
1416 || (sv_derived_from (sv, mpf_class) && fmt[strlen(fmt)-2] == 'F'));
1419 printf (" sv |%p|\n", SvMPZ(sv)));
1422 gmp_asprintf (&RETVAL, fmt, SvMPZ(sv));
1439 SV *sv;
1450 sv = ST(0);
1451 TRACE (printf (" use %d\n", use_sv (sv)));
1452 switch (use_sv (sv)) {
1454 mpz_set_si (RETVAL->m, SvIVX(sv));
1458 mpz_set_ui (RETVAL->m, SvUVX(sv));
1462 mpz_set_d (RETVAL->m, SvNVX(sv));
1466 my_mpz_set_svstr (RETVAL->m, sv);
1470 mpz_set (RETVAL->m, SvMPZ(sv)->m);
1474 mpz_set_q (RETVAL->m, SvMPQ(sv)->m);
1478 mpz_set_f (RETVAL->m, SvMPF(sv));
1497 SV *pv
1549 SV *xv
1550 SV *yv
1551 SV *order
1619 SV *zv
1620 SV *nv
1621 SV *order
1712 SV *xv
1713 SV *yv
1714 SV *order
1990 SV *yv;
2018 SV *sv;
2067 SV *a
2068 SV *b
2091 SV *sv;
2100 sv = sv_newmortal(); sv_usepvn_mg (sv, data, bytes); PUSHs(sv);
2104 mpz_import (order, size, endian, nails, sv)
2109 SV *sv
2115 data = SvPV (sv, len);
2181 SV *sv;
2197 SV *sv;
2205 sv = (exact ? &PL_sv_yes : &PL_sv_no); sv_2mortal(sv); PUSHs(sv);
2213 SV *sv;
2238 # than the size of the values one ought to be storing in an SV (32-bits).
2263 setbit (sv, bit)
2264 SV *sv
2280 use = use_sv (sv);
2281 if (use == USE_MPZ && SvREFCNT(SvRV(sv)) == 1 && ! SvSMAGICAL(sv))
2285 (*table[ix].op) (SvMPZ(sv)->m, bit);
2291 SV *new_sv;
2293 mpz_ptr coerce_ptr = coerce_mpz_using (z->m, sv, use);
2299 SvSetMagicSV (sv, new_sv);
2307 SV *sv;
2387 SV *pv
2390 SV *sv;
2396 { sv = sv_bless (sv_setref_pv (sv_newmortal(), NULL, q), mpq_class_hv); }
2398 { free_mpq (q); sv = pv; }
2399 XPUSHs(sv);
2436 SV *xv
2437 SV *yv
2438 SV *order
2491 SV *qv
2492 SV *nv
2493 SV *order
2582 SV *order
2608 SV *yv
2699 SV *sv = ST(0);
2700 my_mpf_set_sv_using (RETVAL, sv, use_sv(sv));
2707 overload_constant (sv, d1, d2, ...)
2708 SV *sv
2712 assert (SvPOK (sv));
2713 TRACE (printf ("%s constant: %s\n", mpq_class, SvPVX(sv)));
2715 my_mpf_set_svstr (RETVAL, sv);
2748 SV *order
2798 SV *fv
2799 SV *nv
2800 SV *order
2894 SV *xv
2895 SV *yv
2896 SV *order
2994 SV *xv
2995 SV *yv
3009 SV *xv
3010 SV *yv
3032 set_prec (sv, prec)
3033 SV *sv
3040 use = use_sv (sv);
3043 old_f = SvMPF(sv);
3044 if (SvREFCNT(SvRV(sv)) == 1)
3058 my_mpf_set_sv_using (new_f, sv, use);
3060 sv_bless (sv_setref_pv (sv, NULL, new_f), mpf_class_hv);