This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
makedepend.SH: Split too long lines; properly join
[perl5.git] / ext / XS-APItest / numeric.xs
1 MODULE = XS::APItest            PACKAGE = XS::APItest::numeric
2
3 void
4 grok_number(number)
5         SV *number
6     PREINIT:
7         STRLEN len;
8         const char *pv = SvPV(number, len);
9         UV value;
10         int result;
11     PPCODE:
12         EXTEND(SP,2);
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)));
17
18 void
19 grok_number_flags(number, flags)
20         SV *number
21         U32 flags
22     PREINIT:
23         STRLEN len;
24         const char *pv = SvPV(number, len);
25         UV value;
26         int result;
27     PPCODE:
28         EXTEND(SP,2);
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)));
33
34 void
35 grok_atou(number, endsv)
36         SV *number
37         SV *endsv
38     PREINIT:
39         STRLEN len;
40         const char *pv = SvPV(number, len);
41         UV result;
42         const char* endptr;
43     PPCODE:
44         EXTEND(SP,2);
45         if (endsv == &PL_sv_undef) {
46           result = grok_atou(pv, NULL);
47         } else {
48           result = grok_atou(pv, &endptr);
49         }
50         PUSHs(sv_2mortal(newSVuv(result)));
51         if (endsv == &PL_sv_undef) {
52           PUSHs(sv_2mortal(newSVpvn(NULL, 0)));
53         } else {
54           if (endptr) {
55             PUSHs(sv_2mortal(newSViv(endptr - pv)));
56           } else {
57             PUSHs(sv_2mortal(newSViv(0)));
58           }
59         }