1 MODULE = XS::APItest PACKAGE = XS::APItest::numeric
8 const char *pv = SvPV(number, len);
13 result = grok_number(pv, len, &value);
14 PUSHs(sv_2mortal(newSViv(result)));
15 if (result & IS_NUMBER_IN_UV)
16 PUSHs(sv_2mortal(newSVuv(value)));
19 grok_number_flags(number, flags)
24 const char *pv = SvPV(number, len);
29 result = grok_number_flags(pv, len, &value, flags);
30 PUSHs(sv_2mortal(newSViv(result)));
31 if (result & IS_NUMBER_IN_UV)
32 PUSHs(sv_2mortal(newSVuv(value)));
35 grok_atoUV(number, endsv)
40 const char *pv = SvPV(number, len);
41 UV value = 0xdeadbeef;
43 const char* endptr = pv + len;
46 if (endsv == &PL_sv_undef) {
47 result = grok_atoUV(pv, &value, NULL);
49 result = grok_atoUV(pv, &value, &endptr);
51 PUSHs(result ? &PL_sv_yes : &PL_sv_no);
52 PUSHs(sv_2mortal(newSVuv(value)));
53 if (endsv == &PL_sv_undef) {
54 PUSHs(sv_2mortal(newSVpvn(NULL, 0)));
57 PUSHs(sv_2mortal(newSViv(endptr - pv)));
59 PUSHs(sv_2mortal(newSViv(0)));
71 nv = my_strtod(SvPV_force_nolen(sv), &endptr);
72 PUSHs(sv_2mortal(newSVnv(nv)));
75 PUSHs(sv_2mortal(sv));