| line |
true |
false |
branch |
|
400
|
390993 |
927 |
if (sv_isobject(n)) { |
|
401
|
390993 |
0 |
const char *hvname = HvNAME_get(SvSTASH(SvRV(n))); |
|
|
390993 |
0 |
const char *hvname = HvNAME_get(SvSTASH(SvRV(n))); |
|
|
0 |
390993 |
const char *hvname = HvNAME_get(SvSTASH(SvRV(n))); |
|
|
0 |
0 |
const char *hvname = HvNAME_get(SvSTASH(SvRV(n))); |
|
|
390993 |
0 |
const char *hvname = HvNAME_get(SvSTASH(SvRV(n))); |
|
|
0 |
390993 |
const char *hvname = HvNAME_get(SvSTASH(SvRV(n))); |
|
402
|
390993 |
0 |
if (hvname != 0) { |
|
403
|
8 |
390985 |
if (strEQ(hvname, "Math::BigInt") || /* BigFloat not here, force to PP */ |
|
404
|
8 |
0 |
strEQ(hvname, "Math::GMPz") || strEQ(hvname, "Math::GMP") || |
|
|
8 |
0 |
strEQ(hvname, "Math::GMPz") || strEQ(hvname, "Math::GMP") || |
|
405
|
8 |
0 |
strEQ(hvname, "Math::GMPq") || strEQ(hvname, "Math::AnyNum") || |
|
|
8 |
0 |
strEQ(hvname, "Math::GMPq") || strEQ(hvname, "Math::AnyNum") || |
|
406
|
8 |
0 |
strEQ(hvname, "Math::Pari") || strEQ(hvname, "Math::BigInt::Lite")) |
|
|
0 |
8 |
strEQ(hvname, "Math::Pari") || strEQ(hvname, "Math::BigInt::Lite")) |
|
423
|
276617 |
10237 |
const char* mustbe = (negok) ? "must be an integer" : "must be a non-negative integer"; |
|
430
|
0 |
286854 |
if (SVNUMTEST(n)) { /* If defined as number, use it */ |
|
431
|
0 |
0 |
if (SvIsUV(n) || SvIVX(n) >= 0) return 1; /* The normal case */ |
|
|
0 |
0 |
if (SvIsUV(n) || SvIVX(n) >= 0) return 1; /* The normal case */ |
|
432
|
0 |
0 |
if (negok) return -1; |
|
435
|
278228 |
8626 |
if (sv_isobject(n)) { |
|
437
|
5 |
278223 |
if (!isbignum) return 0; |
|
439
|
20 |
286829 |
if (!SvOK(n)) croak("Parameter must be defined"); |
|
440
|
286828 |
1 |
if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len); |
|
|
278223 |
8605 |
if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len); |
|
|
278223 |
0 |
if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len); |
|
|
278223 |
0 |
if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len); |
|
|
1 |
278223 |
if (SvGAMAGIC(n) && !isbignum) ptr = SvPV(n, len); |
|
442
|
286828 |
1 |
if (len == 0 || ptr == 0) croak("Parameter %s", mustbe); |
|
|
0 |
286828 |
if (len == 0 || ptr == 0) croak("Parameter %s", mustbe); |
|
443
|
2107 |
284721 |
if (ptr[0] == '-' && negok) { |
|
|
2103 |
4 |
if (ptr[0] == '-' && negok) { |
|
445
|
5 |
284720 |
} else if (ptr[0] == '+') { |
|
449
|
286827 |
1 |
if (len == 0 || !isDIGIT(ptr[0])) croak("Parameter '%" SVf "' %s", n, mustbe); |
|
|
24 |
286803 |
if (len == 0 || !isDIGIT(ptr[0])) croak("Parameter '%" SVf "' %s", n, mustbe); |
|
451
|
286810 |
223 |
while (len > 0 && *ptr == '0') /* Strip all leading zeros */ |
|
|
230 |
286580 |
while (len > 0 && *ptr == '0') /* Strip all leading zeros */ |
|
453
|
223 |
286580 |
if (len == 0) /* 0 or -0 */ |
|
456
|
2101 |
284479 |
if (isneg) { ret = -1; maxlen = ivmax_maxlen; maxstr = ivmin_str; } |
|
458
|
21464602 |
286568 |
for (i = 0; i < len; i++) /* Ensure all characters are digits */ |
|
459
|
12 |
21464590 |
if (!isDIGIT(ptr[i])) |
|
461
|
237753 |
48815 |
if (len > maxlen) return 0; /* Obvious bigint */ |
|
462
|
6926 |
41889 |
if (len < maxlen) return ret; /* Valid small integer */ |
|
463
|
229764 |
135 |
for (i = 0; i < maxlen; i++) /* Check if in range */ |
|
464
|
41754 |
188010 |
if (ptr[i] != maxstr[i]) |
|
465
|
586 |
41168 |
return ptr[i] < maxstr[i] ? ret : 0; |
|
478
|
0 |
5311135 |
if (svn == 0) croak("Parameter must be defined"); |
|
480
|
5024281 |
286854 |
if (SVNUMTEST(svn)) { |
|
482
|
4121759 |
902522 |
if (n >= 0) { |
|
483
|
52582 |
4069177 |
if (n == 0 && (mask & IFLAG_NONZERO)) |
|
|
1 |
52581 |
if (n == 0 && (mask & IFLAG_NONZERO)) |
|
488
|
127250 |
775272 |
if (SvIsUV(svn)) { |
|
489
|
27 |
127223 |
if (mask & IFLAG_IV) |
|
494
|
361034 |
414238 |
if (mask & IFLAG_ABS) { *val = (UV)(-n); return 1; } |
|
495
|
16 |
414222 |
if (mask & IFLAG_POS) croak("Parameter '%" SVf "' must be a non-negative integer", svn); |
|
501
|
7613 |
279183 |
if (status == 1) { |
|
503
|
223 |
7390 |
if (n == 0 && (mask & IFLAG_NONZERO)) |
|
|
0 |
223 |
if (n == 0 && (mask & IFLAG_NONZERO)) |
|
505
|
718 |
6895 |
if (n > (UV)IV_MAX && (mask & IFLAG_IV)) |
|
|
0 |
718 |
if (n > (UV)IV_MAX && (mask & IFLAG_IV)) |
|
508
|
257 |
278926 |
} else if (status == -1) { |
|
510
|
31 |
226 |
if (mask & IFLAG_ABS) { *val = (UV)(-n); status = 1; } |
|
530
|
0 |
160652 |
if (n == 0) return; |
|
531
|
140456 |
20196 |
if (astatus != -1) { |
|
535
|
20196 |
0 |
*a = (r == 0) ? 0 : n-r; |
|
551
|
107650 |
7465 |
int use_gmp = stashflags & VCALL_GMP && _XS_get_callgmp() && _XS_get_callgmp() >= minversion; |
|
|
0 |
107650 |
int use_gmp = stashflags & VCALL_GMP && _XS_get_callgmp() && _XS_get_callgmp() >= minversion; |
|
|
0 |
0 |
int use_gmp = stashflags & VCALL_GMP && _XS_get_callgmp() && _XS_get_callgmp() >= minversion; |
|
553
|
0 |
115115 |
if (use_gmp && hv_exists(MY_CXT.MPUGMP,name,namelen)) { |
|
|
0 |
0 |
if (use_gmp && hv_exists(MY_CXT.MPUGMP,name,namelen)) { |
|
555
|
0 |
0 |
if (gvp) gv = *gvp; |
|
557
|
115115 |
0 |
if (!gv && (stashflags & VCALL_PP)) |
|
|
115114 |
1 |
if (!gv && (stashflags & VCALL_PP)) |
|
559
|
115115 |
0 |
if (!gv) { |
|
560
|
115114 |
1 |
GV ** gvp = (GV**)hv_fetch(stashflags & VCALL_PP? MY_CXT.MPUPP : MY_CXT.MPUroot, name,namelen,0); |
|
561
|
115115 |
0 |
if (gvp) gv = *gvp; |
|
565
|
0 |
115115 |
PUSHMARK(PL_stack_sp-nargs); |
|
578
|
2690376 |
4121 |
for (i = 0; i < ngmpinfo; i++) |
|
579
|
110971 |
2579405 |
if (strcmp(gmp_info[i].name, name) == 0) |
|
589
|
110971 |
4121 |
bool usegmp = ginfoi >= 0 && gmp_is_ok; |
|
|
107650 |
3321 |
bool usegmp = ginfoi >= 0 && gmp_is_ok; |
|
591
|
107650 |
7442 |
if (usegmp) { |
|
636
|
5169 |
2 |
for (; nops < 500; o = o->op_next) { |
|
637
|
56 |
5113 |
if (!o) { |
|
638
|
0 |
56 |
if (nbranch > 0) { o = branches[--nbranch]; continue; } |
|
663
|
0 |
28 |
if (nbranch >= 8) return 1; /* Too deep */ |
|
667
|
22 |
56 |
if (nbranch > 0) { o = branches[--nbranch]; continue; } |
|
671
|
2 |
56 |
if (nops >= 500) return 1; |
|
706
|
108145 |
9 |
if (!SvOK(output) || sv_isobject(output) || SVNUMTEST(output)) |
|
|
46229 |
61916 |
if (!SvOK(output) || sv_isobject(output) || SVNUMTEST(output)) |
|
|
46228 |
1 |
if (!SvOK(output) || sv_isobject(output) || SVNUMTEST(output)) |
|
709
|
1 |
0 |
if (!input || !sv_isobject(input)) { |
|
|
1 |
0 |
if (!input || !sv_isobject(input)) { |
|
712
|
0 |
0 |
const char *iname = HvNAME_get(SvSTASH(SvRV(input))); |
|
|
0 |
0 |
const char *iname = HvNAME_get(SvSTASH(SvRV(input))); |
|
|
0 |
0 |
const char *iname = HvNAME_get(SvSTASH(SvRV(input))); |
|
|
0 |
0 |
const char *iname = HvNAME_get(SvSTASH(SvRV(input))); |
|
|
0 |
0 |
const char *iname = HvNAME_get(SvSTASH(SvRV(input))); |
|
|
0 |
0 |
const char *iname = HvNAME_get(SvSTASH(SvRV(input))); |
|
713
|
0 |
0 |
if (strEQ(iname, "Math::BigInt")) { |
|
715
|
0 |
0 |
} else if (strEQ(iname, "Math::GMPz")) { |
|
717
|
0 |
0 |
} else if (strEQ(iname, "Math::GMP")) { |
|
720
|
0 |
0 |
dSP; (void)POPs; ENTER; PUSHMARK(SP); |
|
721
|
0 |
0 |
XPUSHs(sv_2mortal(newSVpv(iname, 0))); XPUSHs(output); |
|
|
0 |
0 |
XPUSHs(sv_2mortal(newSVpv(iname, 0))); XPUSHs(output); |
|
728
|
0 |
2575 |
dSP; ENTER; PUSHMARK(SP); |
|
729
|
0 |
2575 |
XPUSHs(r); |
|
851
|
962 |
73 |
if (x <= (UV)IV_MAX) xsign = 0; |
|
852
|
950 |
85 |
if (y <= (UV)IV_MAX) ysign = 0; |
|
853
|
968 |
67 |
if (xsign == ysign && x == y) return 0; |
|
|
88 |
880 |
if (xsign == ysign && x == y) return 0; |
|
855
|
67 |
880 |
if (xsign != ysign) return (xsign < ysign) ? -1 : 1; |
|
|
25 |
42 |
if (xsign != ysign) return (xsign < ysign) ? -1 : 1; |
|
857
|
28 |
852 |
return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1; |
|
|
15 |
13 |
return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1; |
|
|
852 |
15 |
return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1; |
|
|
183 |
669 |
return ((xsign == -1 && (IV)x < (IV)y) || (xsign != -1 && x < y)) ? -1 : 1; |
|
897
|
0 |
2314 |
if (svarr == 0) { |
|
899
|
0 |
0 |
return svp ? *svp : &PL_sv_undef; |
|
928
|
462 |
0 |
USE_ARREF(avp, sva, fstr, AR_READ); |
|
|
0 |
462 |
USE_ARREF(avp, sva, fstr, AR_READ); |
|
|
0 |
462 |
USE_ARREF(avp, sva, fstr, AR_READ); |
|
931
|
50 |
412 |
if (len == 0) { |
|
935
|
0 |
412 |
New(0, r, len, UV); |
|
936
|
2159 |
329 |
for (i = 0; i < len; i++) { |
|
938
|
0 |
2159 |
if (iv == 0) continue; |
|
939
|
1903 |
256 |
if (SVNUMTEST(iv)) { |
|
941
|
424 |
1479 |
if (n < 0) { |
|
942
|
73 |
351 |
if (SvIsUV(iv)) itype |= IARR_TYPE_POS; |
|
944
|
20 |
404 |
if (itype == IARR_TYPE_BAD) break; |
|
948
|
18 |
238 |
READ_UV_IARR(r[i], iv, itype); |
|
|
181 |
57 |
READ_UV_IARR(r[i], iv, itype); |
|
|
30 |
151 |
READ_UV_IARR(r[i], iv, itype); |
|
|
199 |
57 |
READ_UV_IARR(r[i], iv, itype); |
|
|
193 |
6 |
READ_UV_IARR(r[i], iv, itype); |
|
951
|
83 |
329 |
if (i < len) { |
|
957
|
318 |
11 |
if (want_sort) { |
|
958
|
99 |
219 |
if (itype == IARR_TYPE_NEG) { |
|
959
|
555 |
82 |
for (i = 1; i < len; i++) |
|
960
|
17 |
538 |
if ( (IV)r[i] <= (IV)r[i-1] ) |
|
963
|
1042 |
198 |
for (i = 1; i < len; i++) |
|
964
|
21 |
1021 |
if (r[i] <= r[i-1]) |
|
967
|
38 |
280 |
if (i < len) |
|
982
|
70 |
0 |
if (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVAV) return NULL; |
|
|
0 |
70 |
if (!SvROK(sv) || SvTYPE(SvRV(sv)) != SVt_PVAV) return NULL; |
|
984
|
0 |
70 |
if (SvMAGICAL(av)) return NULL; |
|
987
|
116 |
34 |
for (i = 0; i < len; i++) { |
|
989
|
103 |
13 |
if (!SVNUMTEST(elem) || (!SvIsUV(elem) && SvIVX(elem) < 0)) return NULL; |
|
|
95 |
8 |
if (!SVNUMTEST(elem) || (!SvIsUV(elem) && SvIVX(elem) < 0)) return NULL; |
|
|
15 |
80 |
if (!SVNUMTEST(elem) || (!SvIsUV(elem) && SvIVX(elem) < 0)) return NULL; |
|
990
|
54 |
34 |
if (i > 0 && SvUVX(elem) <= SvUVX(arr[i-1])) return NULL; |
|
|
8 |
46 |
if (i > 0 && SvUVX(elem) <= SvUVX(arr[i-1])) return NULL; |
|
1002
|
0 |
202 |
if (len == 0) { |
|
1006
|
0 |
202 |
New(0, r, len, UV); |
|
1007
|
923 |
147 |
for (i = 0; i < len; i++) { |
|
1009
|
800 |
123 |
if (SVNUMTEST(iv)) { |
|
1011
|
85 |
715 |
if (n < 0) { |
|
1012
|
36 |
49 |
if (SvIsUV(iv)) itype |= IARR_TYPE_POS; |
|
1014
|
6 |
79 |
if (itype == IARR_TYPE_BAD) break; |
|
1018
|
27 |
96 |
READ_UV_IARR(r[i], iv, itype); |
|
|
48 |
48 |
READ_UV_IARR(r[i], iv, itype); |
|
|
12 |
36 |
READ_UV_IARR(r[i], iv, itype); |
|
|
75 |
48 |
READ_UV_IARR(r[i], iv, itype); |
|
|
74 |
1 |
READ_UV_IARR(r[i], iv, itype); |
|
1021
|
55 |
147 |
if (i < len) { |
|
1027
|
87 |
60 |
if (want_sort) { |
|
1028
|
23 |
64 |
if (itype == IARR_TYPE_NEG) { |
|
1029
|
32 |
13 |
for (i = 1; i < len; i++) |
|
1030
|
10 |
22 |
if ( (IV)r[i] <= (IV)r[i-1] ) |
|
1033
|
160 |
44 |
for (i = 1; i < len; i++) |
|
1034
|
20 |
140 |
if (r[i] <= r[i-1]) |
|
1037
|
30 |
57 |
if (i < len) |
|
1047
|
0 |
14 |
if (SvTYPE((SV*)av) != SVt_PVAV) |
|
1050
|
0 |
14 |
New(0, r, len, UV); |
|
1051
|
108 |
14 |
for (i = len-1; i >= 0; i--) { |
|
1053
|
0 |
108 |
if (_validate_and_set(r+i, aTHX_ *psvd, IFLAG_ANY) != 1) break; |
|
1055
|
14 |
94 |
if (r[i] >= (UV)base && i > 0) { |
|
|
11 |
3 |
if (r[i] >= (UV)base && i > 0) { |
|
1062
|
0 |
14 |
if (i >= 0) { |
|
1074
|
28 |
0 |
if (typea == IARR_TYPE_BAD || typeb == IARR_TYPE_BAD) |
|
|
0 |
28 |
if (typea == IARR_TYPE_BAD || typeb == IARR_TYPE_BAD) |
|
1076
|
17 |
11 |
if (typea != IARR_TYPE_NEG && typeb != IARR_TYPE_NEG) { |
|
|
17 |
0 |
if (typea != IARR_TYPE_NEG && typeb != IARR_TYPE_NEG) { |
|
1078
|
3 |
14 |
if (UV_MAX-amax < bmax) return IARR_TYPE_BAD; |
|
1079
|
2 |
12 |
if (amax+bmax > (UV)IV_MAX) return IARR_TYPE_POS; |
|
1083
|
11 |
0 |
if (typea == IARR_TYPE_POS || typeb == IARR_TYPE_POS) |
|
|
3 |
8 |
if (typea == IARR_TYPE_POS || typeb == IARR_TYPE_POS) |
|
1086
|
7 |
1 |
if ((IV)amax > 0 && (IV)bmax > 0 && amax + bmax > (UV)IV_MAX) |
|
|
7 |
0 |
if ((IV)amax > 0 && (IV)bmax > 0 && amax + bmax > (UV)IV_MAX) |
|
|
2 |
5 |
if ((IV)amax > 0 && (IV)bmax > 0 && amax + bmax > (UV)IV_MAX) |
|
1088
|
6 |
0 |
if ((IV)amin < 0 && (IV)bmin < 0 && (UV)(-(IV)amin) + (UV)(-(IV)bmin) > (UV)IV_MAX) |
|
|
4 |
2 |
if ((IV)amin < 0 && (IV)bmin < 0 && (UV)(-(IV)amin) + (UV)(-(IV)bmin) > (UV)IV_MAX) |
|
|
2 |
2 |
if ((IV)amin < 0 && (IV)bmin < 0 && (UV)(-(IV)amin) + (UV)(-(IV)bmin) > (UV)IV_MAX) |
|
1090
|
4 |
0 |
if (((IV)amin > 0 || (IV)bmin > 0) && (IV)(amin+bmin) >= 0) |
|
|
2 |
2 |
if (((IV)amin > 0 || (IV)bmin > 0) && (IV)(amin+bmin) >= 0) |
|
|
1 |
1 |
if (((IV)amin > 0 || (IV)bmin > 0) && (IV)(amin+bmin) >= 0) |
|
1132
|
70 |
96 |
if (cache && cache->status[0] != 0) { |
|
|
45 |
25 |
if (cache && cache->status[0] != 0) { |
|
1135
|
4 |
117 |
_SC_GET_VALUE(*lostatus, *loval, avarr, loindex); |
|
1136
|
23 |
94 |
if (cache) { |
|
1141
|
68 |
94 |
if (cache && cache->status[1] != 0) { |
|
|
45 |
23 |
if (cache && cache->status[1] != 0) { |
|
1144
|
0 |
117 |
_SC_GET_VALUE(*histatus, *hival, avarr, hiindex); |
|
1145
|
23 |
94 |
if (cache) { |
|
1167
|
39 |
130 |
if (sign != 1 && sign != -1) |
|
|
3 |
36 |
if (sign != 1 && sign != -1) |
|
1170
|
3 |
163 |
if (len == 0) { |
|
1178
|
4 |
159 |
if (_sc_set_lohi(aTHX_ arr, cache, lo, hi, &lostatus, &histatus, &rlo, &rhi) < 0) |
|
1182
|
51 |
108 |
if (cmp <= 0) { *eq = cmp==0; return lo; } |
|
1185
|
34 |
74 |
if (cmp >= 0) { *eq = cmp==0; return hi + (cmp>0); } |
|
1188
|
218 |
29 |
while (hi-lo > 1) { |
|
1190
|
47 |
171 |
SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache); |
|
|
0 |
47 |
SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache); |
|
|
95 |
76 |
SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache); |
|
|
95 |
0 |
SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache); |
|
|
0 |
76 |
SC_SET_MID_VALUE(midstatus, rmid, arr, (size_t)mid, cache); |
|
1192
|
45 |
173 |
if (cmp == 0) { *eq = 1; return mid; } |
|
1193
|
89 |
84 |
if (cmp < 0) { lo = mid; rlo = rmid; lostatus = midstatus; } |
|
1196
|
21 |
8 |
if (sign == histatus && rhi == val) |
|
|
0 |
21 |
if (sign == histatus && rhi == val) |
|
1198
|
0 |
29 |
else if (_sign_cmp(sign,val, histatus,rhi) > 0) |
|
1211
|
64 |
0 |
return (index < 0) ? index : eq ? 0 : index+1; |
|
|
51 |
13 |
return (index < 0) ? index : eq ? 0 : index+1; |
|
1222
|
33 |
0 |
return (index < 0) ? index : eq ? index+1 : 0; |
|
|
25 |
8 |
return (index < 0) ? index : eq ? index+1 : 0; |
|
1231
|
65 |
7 |
return (index < 0) ? index : eq ? 1 : 0; |
|
1237
|
8 |
25 |
if (index <= 0) |
|
1243
|
13 |
12 |
if (pos > alen/2) { |
|
1244
|
5 |
8 |
if (pos < alen) { |
|
1250
|
0 |
12 |
if (pos > 1) { |
|
1262
|
2 |
47 |
if (index <= 0) |
|
1266
|
39 |
8 |
SV* newsvb = NEWSVINT(bstatus, b); |
|
1268
|
38 |
9 |
if ((Size_t)index > alen/2) { |
|
1270
|
19 |
19 |
if ((Size_t)index <= alen) { |
|
1279
|
3 |
6 |
if (index > 1) { |
|
1296
|
39 |
0 |
if ( ((!SvROK(a)) || (SvTYPE(SvRV(a)) != SVt_PVAV)) || |
|
|
39 |
0 |
if ( ((!SvROK(a)) || (SvTYPE(SvRV(a)) != SVt_PVAV)) || |
|
1297
|
39 |
0 |
((!SvROK(b)) || (SvTYPE(SvRV(b)) != SVt_PVAV)) ) |
|
|
0 |
39 |
((!SvROK(b)) || (SvTYPE(SvRV(b)) != SVt_PVAV)) ) |
|
1303
|
3 |
36 |
if (alen != blen) |
|
1305
|
184 |
30 |
for (i = 0; i <= alen; i++) { |
|
1311
|
184 |
0 |
if (!iva || !ivb) return -1; |
|
|
0 |
184 |
if (!iva || !ivb) return -1; |
|
1315
|
3 |
181 |
if (!SvOK(sva) && !SvOK(svb)) /* Two undefs are fine. */ |
|
|
2 |
1 |
if (!SvOK(sva) && !SvOK(svb)) /* Two undefs are fine. */ |
|
1317
|
181 |
1 |
if (!SvOK(sva) || !SvOK(svb)) /* One undef isn't ok. */ |
|
|
0 |
181 |
if (!SvOK(sva) || !SvOK(svb)) /* One undef isn't ok. */ |
|
1320
|
181 |
0 |
if (SvTYPE(sva) >= SVt_PVAV || SvTYPE(svb) >= SVt_PVAV) |
|
|
0 |
181 |
if (SvTYPE(sva) >= SVt_PVAV || SvTYPE(svb) >= SVt_PVAV) |
|
1324
|
29 |
152 |
if ( (SvROK(sva) && !sv_isobject(sva)) || |
|
|
8 |
21 |
if ( (SvROK(sva) && !sv_isobject(sva)) || |
|
1325
|
9 |
151 |
(SvROK(svb) && !sv_isobject(svb)) ) { |
|
|
1 |
8 |
(SvROK(svb) && !sv_isobject(svb)) ) { |
|
1327
|
21 |
1 |
if ( (SvROK(sva) && SvTYPE(SvRV(sva)) != SVt_PVAV) || |
|
|
20 |
1 |
if ( (SvROK(sva) && SvTYPE(SvRV(sva)) != SVt_PVAV) || |
|
1328
|
21 |
0 |
(SvROK(svb) && SvTYPE(SvRV(svb)) != SVt_PVAV) ) |
|
|
0 |
21 |
(SvROK(svb) && SvTYPE(SvRV(svb)) != SVt_PVAV) ) |
|
1331
|
1 |
20 |
if (SvROK(sva) != SvROK(svb)) |
|
1335
|
20 |
0 |
if (res == 1) continue; |
|
1340
|
117 |
42 |
if ( SVNUMTEST(sva) && SVNUMTEST(svb) |
|
|
116 |
1 |
if ( SVNUMTEST(sva) && SVNUMTEST(svb) |
|
1341
|
0 |
116 |
&& (SvTYPE(sva) == SVt_IV || SvTYPE(sva) == SVt_PVIV) |
|
|
0 |
0 |
&& (SvTYPE(sva) == SVt_IV || SvTYPE(sva) == SVt_PVIV) |
|
1342
|
0 |
116 |
&& (SvTYPE(svb) == SVt_IV || SvTYPE(svb) == SVt_PVIV) ) { |
|
|
0 |
0 |
&& (SvTYPE(svb) == SVt_IV || SvTYPE(svb) == SVt_PVIV) ) { |
|
1344
|
1 |
115 |
if (va != vb) return 0; |
|
1353
|
42 |
1 |
if (alen != blen || strcmp(stra,strb) != 0) |
|
|
1 |
41 |
if (alen != blen || strcmp(stra,strb) != 0) |
|
1371
|
103 |
39 |
for (i = 0; i < k; i++) |
|
1373
|
6 |
33 |
if (derangement && k >= 2) { /* Make derangements start deranged */ |
|
|
4 |
2 |
if (derangement && k >= 2) { /* Make derangements start deranged */ |
|
1374
|
19 |
4 |
for (i = 0; i < k; i++) |
|
1375
|
11 |
8 |
cm[k-i-1] = (i&1) ? i : i+2; |
|
1376
|
3 |
1 |
if (k & 1) { |
|
1385
|
15584 |
6950 |
if (ix == 0) { |
|
1386
|
3910 |
11674 |
if (cm[0]++ < n) return 0; /* Increment last value */ |
|
1387
|
38811 |
25 |
for (i = 1; i < k && cm[i] >= n-i; i++) ; /* Find next index to incr */ |
|
|
27162 |
11649 |
for (i = 1; i < k && cm[i] >= n-i; i++) ; /* Find next index to incr */ |
|
1388
|
25 |
11649 |
if (i >= k) return 1; /* Done! */ |
|
1390
|
38774 |
11649 |
while (i-- > 0) cm[i] = cm[i+1] + 1; /* Set the rest */ |
|
1391
|
1864 |
5086 |
} else if (ix == 1) { |
|
1392
|
8730 |
6 |
for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */ |
|
|
3650 |
5080 |
for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */ |
|
1393
|
6 |
5080 |
if (j >= k) return 1; /* Done! */ |
|
1394
|
1818 |
5080 |
for (m = 0; cm[j] > cm[m]; m++) ; /* Find next greater */ |
|
1396
|
2753 |
5080 |
for (i = j-1, m = 0; m < i; i--, m++) /* Reverse the end */ |
|
1400
|
5000 |
5 |
for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */ |
|
|
2268 |
2732 |
for (j = 1; j < k && cm[j] > cm[j-1]; j++) ; /* Find last decrease */ |
|
1401
|
5 |
2732 |
if (j >= k) return 1; /* Done! */ |
|
1402
|
1134 |
2732 |
for (m = 0; cm[j] > cm[m]; m++) ; /* Find next greater */ |
|
1404
|
536 |
2196 |
if (cm[j] == k-j) goto REDERANGE; /* Skip? */ |
|
1405
|
1371 |
2196 |
for (i = j-1, m = 0; m < i; i--, m++) /* Reverse the end */ |
|
1407
|
15261 |
1859 |
for (i = 0; i < k; i++) /* Check deranged */ |
|
1408
|
337 |
14924 |
if (cm[k-i-1]-1 == i) |
|
1410
|
337 |
1859 |
if (i != k) goto REDERANGE; |
|
1440
|
12120 |
120 |
for (i = 0; i <= CINTS; i++) { |
|
1489
|
12120 |
120 |
for (i = 0; i <= CINTS; i++) { |
|
1504
|
1 |
10 |
if (items == 0) { |
|
1506
|
0 |
10 |
} else if (_XS_get_secure()) { |
|
1512
|
0 |
11 |
if (_XS_get_callgmp() >= 42) CALLROOTSUB("_csrand_p"); |
|
1519
|
0 |
5 |
if (_XS_get_secure()) |
|
1521
|
1 |
4 |
if (items == 0) |
|
1524
|
0 |
5 |
if (_XS_get_callgmp() >= 42) CALLROOTSUB("_srand_p"); |
|
1525
|
0 |
5 |
RETVAL = seedval; |
|
1539
|
110106 |
10010 |
RETVAL = ix == 0 ? irand32(MY_CXT.randcxt) : irand64(MY_CXT.randcxt); |
|
|
112644 |
7472 |
RETVAL = ix == 0 ? irand32(MY_CXT.randcxt) : irand64(MY_CXT.randcxt); |
|
1552
|
2001 |
4036 |
if (m != 0) RETVAL *= m; |
|
1561
|
32 |
1 |
RETVAL = newSV(n == 0 ? 1 : n); |
|
1574
|
2 |
0 |
RETVAL = newSV(n == 0 ? 1 : n); |
|
1626
|
110638 |
115328 |
if (status != 0) { |
|
1627
|
110308 |
330 |
SETSVINT(svn, status == 1, n, (IV)n); |
|
1635
|
1650 |
113678 |
if (mask & IFLAG_ABS) { |
|
1638
|
4639 |
109039 |
} else if (mask & IFLAG_POS) { |
|
1639
|
49 |
4590 |
if (!_is_sv_bigint(aTHX_ svn)) |
|
1642
|
867 |
108172 |
if (!_is_sv_bigint(aTHX_ svn)) |
|
1646
|
225965 |
0 |
RETVAL = TRUE; |
|
1656
|
10 |
0 |
if (MY_CXT.MPUPP != NULL) DISPATCH_VOIDPP(); |
|
1687
|
1405 |
1833 |
UV lo = 0, hi, count = 0; |
|
1689
|
1405 |
1833 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
1405 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
1833 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
1690
|
1832 |
1 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
1832 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
1691
|
2416 |
821 |
if (lo <= hi) { |
|
1729
|
849 |
22 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
1759
|
1001 |
29 |
UV lo = 2, hi; |
|
1761
|
1001 |
29 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
1001 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
29 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
1762
|
29 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
29 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
1768
|
1 |
1029 |
if (retok == 0 && HAVE_SUM_PRIMES128) { |
|
1771
|
1 |
0 |
if (retok == 1 && lo > 2) { |
|
|
0 |
1 |
if (retok == 1 && lo > 2) { |
|
1774
|
0 |
0 |
if (count < lo_loc) hicount--; |
|
1777
|
1 |
0 |
if (retok == 1 && hicount > 0) |
|
|
1 |
0 |
if (retok == 1 && hicount > 0) |
|
1780
|
1029 |
0 |
if (retok == 1) |
|
1788
|
11005 |
36 |
UV lo = 2, hi, ret; |
|
1791
|
11005 |
36 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
11000 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
36 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
1792
|
33 |
1 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
27 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
1794
|
11021 |
6 |
if (ret) XSRETURN_UV(ret); |
|
1803
|
0 |
0 |
UV lo = 2, hi; |
|
1805
|
0 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
1806
|
0 |
0 |
(items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
0 |
0 |
(items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
1807
|
0 |
0 |
if (lo <= hi) { |
|
1808
|
0 |
0 |
int fd = (infd == -1) ? fileno(stdout) : infd; |
|
1835
|
0 |
6 |
RETVAL = ret; |
|
1852
|
16 |
36 |
if ((low <= 2) && (high >= 2)) av_push(av, newSVuv( 2 )); |
|
|
12 |
4 |
if ((low <= 2) && (high >= 2)) av_push(av, newSVuv( 2 )); |
|
1853
|
20 |
32 |
if ((low <= 3) && (high >= 3)) av_push(av, newSVuv( 3 )); |
|
|
12 |
8 |
if ((low <= 3) && (high >= 3)) av_push(av, newSVuv( 3 )); |
|
1854
|
20 |
32 |
if ((low <= 5) && (high >= 5)) av_push(av, newSVuv( 5 )); |
|
|
8 |
12 |
if ((low <= 5) && (high >= 5)) av_push(av, newSVuv( 5 )); |
|
1855
|
20 |
32 |
if (low < 7) low = 7; |
|
1856
|
36 |
16 |
if (low <= high) { |
|
1857
|
9 |
27 |
if (ix == 0) { /* Sieve with primary cache */ |
|
1858
|
9 |
0 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
0 |
9 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
0 |
547 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
0 |
0 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
0 |
0 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
131 |
416 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
0 |
139 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
8 |
131 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
0 |
131 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
0 |
547 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
|
9 |
538 |
START_DO_FOR_EACH_PRIME(low, high) { |
|
1861
|
9 |
18 |
} else if (ix == 1) { /* Trial */ |
|
1863
|
538 |
9 |
low <= high && low != 0; |
|
|
538 |
0 |
low <= high && low != 0; |
|
1867
|
9 |
9 |
} else if (ix == 2) { /* Erat with private memory */ |
|
1869
|
639 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) { |
|
|
9 |
630 |
START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) { |
|
|
538 |
92 |
START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) { |
|
|
639 |
17 |
START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) { |
|
|
26 |
9 |
START_DO_FOR_EACH_SIEVE_PRIME( sieve, 0, low, high ) { |
|
1873
|
9 |
0 |
} else if (ix == 3) { /* Segment */ |
|
1877
|
9 |
9 |
while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) { |
|
1878
|
560 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
9 |
551 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
538 |
13 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
560 |
14 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
23 |
9 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
1891
|
1077 |
102 |
UV lo = 0, hi, i; |
|
1893
|
1077 |
102 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
1073 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
102 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
1894
|
94 |
1 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
90 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
1896
|
1089 |
74 |
if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 )); |
|
|
1082 |
7 |
if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 )); |
|
1897
|
1095 |
68 |
if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 )); |
|
|
1082 |
13 |
if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 )); |
|
1898
|
1098 |
65 |
if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 )); |
|
|
1074 |
24 |
if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 )); |
|
1899
|
1099 |
64 |
if (lo < 7) lo = 7; |
|
1900
|
1126 |
37 |
if (lo <= hi) { |
|
1901
|
1106 |
20 |
if ( hi-lo <= 10 |
|
1902
|
4 |
1102 |
|| (hi > 100000000UL && hi-lo <= 330) |
|
|
4 |
0 |
|| (hi > 100000000UL && hi-lo <= 330) |
|
1903
|
2 |
1104 |
|| (hi > 4000000000UL && hi-lo <= 1500) |
|
|
1 |
1 |
|| (hi > 4000000000UL && hi-lo <= 1500) |
|
1905
|
708 |
21 |
for (i = !(lo&1); i <= hi-lo; i += 2) |
|
1906
|
47 |
661 |
if (is_prime(lo+i)) |
|
1908
|
9 |
1096 |
} else if (hi < (65536*30) || hi <= get_prime_cache(0,0)) { |
|
|
0 |
9 |
} else if (hi < (65536*30) || hi <= get_prime_cache(0,0)) { |
|
1909
|
1096 |
0 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
0 |
1096 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
0 |
577961 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
0 |
0 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
0 |
0 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
205047 |
372914 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
162 |
213660 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
8775 |
204885 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
162 |
204885 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
0 |
577799 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
|
934 |
576865 |
START_DO_FOR_EACH_PRIME(lo, hi) { |
|
1916
|
12 |
9 |
while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) { |
|
1917
|
307637 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high) |
|
|
9 |
307628 |
START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high) |
|
|
307612 |
16 |
START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high) |
|
|
307637 |
18320 |
START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high) |
|
|
18329 |
12 |
START_DO_FOR_EACH_SIEVE_PRIME(segment, seg_base, seg_low, seg_high) |
|
1936
|
14 |
8 |
if ((items == 2 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
14 |
if ((items == 2 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
8 |
0 |
if ((items == 2 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
1937
|
6 |
2 |
(items >= 3 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
6 |
0 |
(items >= 3 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
1940
|
15 |
5 |
if (ix == 0) n = generate_almost_primes(&S, k, lo, hi); |
|
1942
|
412 |
20 |
for (i = 0; i < n; i++) |
|
1944
|
19 |
1 |
if (S != 0) Safefree(S); |
|
1958
|
54 |
48 |
UV lo = 0, hi, i, num, *L; |
|
1960
|
54 |
48 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
54 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
48 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
1961
|
47 |
1 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
47 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
1963
|
52 |
49 |
if (ix == 0) { /* Prime power */ |
|
1964
|
51 |
1 |
if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 )); |
|
|
50 |
1 |
if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 )); |
|
1965
|
51 |
1 |
if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 )); |
|
|
49 |
2 |
if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 )); |
|
1966
|
51 |
1 |
if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 )); |
|
|
48 |
3 |
if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 )); |
|
1967
|
51 |
1 |
if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 )); |
|
|
47 |
4 |
if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 )); |
|
1968
|
16 |
33 |
} else if (ix == 1) { /* Twin */ |
|
1969
|
5 |
11 |
if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 )); |
|
|
5 |
0 |
if ((lo <= 3) && (hi >= 3)) av_push(av, newSVuv( 3 )); |
|
1970
|
11 |
5 |
if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 )); |
|
|
11 |
0 |
if ((lo <= 5) && (hi >= 5)) av_push(av, newSVuv( 5 )); |
|
1971
|
18 |
15 |
} else if (ix == 2) { /* Semi */ |
|
1972
|
6 |
12 |
if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 )); |
|
|
6 |
0 |
if ((lo <= 4) && (hi >= 4)) av_push(av, newSVuv( 4 )); |
|
1973
|
7 |
11 |
if ((lo <= 6) && (hi >= 6)) av_push(av, newSVuv( 6 )); |
|
|
7 |
0 |
if ((lo <= 6) && (hi >= 6)) av_push(av, newSVuv( 6 )); |
|
1974
|
15 |
0 |
} else if (ix == 3) { /* Ramanujan */ |
|
1975
|
4 |
11 |
if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 )); |
|
|
4 |
0 |
if ((lo <= 2) && (hi >= 2)) av_push(av, newSVuv( 2 )); |
|
1977
|
75 |
26 |
if (lo < 7) lo = 7; |
|
1978
|
95 |
6 |
if (lo <= hi) { |
|
1986
|
964 |
95 |
for (i = 0; i < num; i++) |
|
1999
|
206 |
1 |
UV lo = 0, hi, i, nlucky = 0; |
|
2001
|
206 |
1 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
206 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
1 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
2002
|
1 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
1 |
0 |
(items == 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
2004
|
206 |
1 |
if (lo == 0 && hi <= UVCONST(4000000000)) { |
|
|
206 |
0 |
if (lo == 0 && hi <= UVCONST(4000000000)) { |
|
2006
|
45716 |
206 |
for (i = 0; i < nlucky; i++) |
|
2011
|
6 |
1 |
for (i = 0; i < nlucky; i++) |
|
2026
|
79 |
1 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
2027
|
41 |
38 |
if (ix == 0) { |
|
2029
|
9 |
32 |
if (res == 0) XSRETURN_UNDEF; |
|
2043
|
38 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS) == 1) { |
|
2044
|
0 |
38 |
if (GIMME_V != G_ARRAY) |
|
2047
|
9 |
29 |
if (L == 0) XSRETURN_EMPTY; |
|
2048
|
29 |
0 |
EXTEND(SP, (EXTEND_TYPE)npairs); |
|
|
0 |
29 |
EXTEND(SP, (EXTEND_TYPE)npairs); |
|
2049
|
113 |
29 |
for (i = 0; i < npairs; i++) |
|
2060
|
1 |
9 |
UV lo = 1, hi, i, npowerful, *powerful; |
|
2062
|
1 |
9 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
0 |
1 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
|
9 |
0 |
if ((items == 1 && _validate_and_set(&hi, aTHX_ svlo, IFLAG_POS)) || |
|
2063
|
9 |
0 |
(items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
|
9 |
0 |
(items >= 2 && _validate_and_set(&lo, aTHX_ svlo, IFLAG_POS) && _validate_and_set(&hi, aTHX_ svhi, IFLAG_POS))) { |
|
2066
|
101 |
10 |
for (i = 0; i < npowerful; i++) |
|
2082
|
10 |
0 |
if (status == 1) { |
|
2083
|
0 |
10 |
if ((n+width) < n) { |
|
2086
|
4 |
6 |
for (i = (n<2)?2-n:0; i < width; i++) |
|
|
1610 |
10 |
for (i = (n<2)?2-n:0; i < width; i++) |
|
2087
|
316 |
1294 |
if (is_rough(n+i, (depth+1) >= (n+i) ? n+i : depth+1)) |
|
2088
|
0 |
316 |
XPUSHs(sv_2mortal(newSVuv( i ))); |
|
2091
|
0 |
10 |
if (status != 1) { |
|
2104
|
0 |
41 |
if (items > 100) croak("sieve_prime_cluster: too many entries"); |
|
2106
|
215 |
41 |
for (i = 1; i < nc; i++) { |
|
2107
|
0 |
215 |
if (!_validate_and_set(&cval, aTHX_ ST(1+i), IFLAG_POS)) |
|
2109
|
0 |
215 |
if (cval & 1) croak("sieve_prime_cluster: values must be even"); |
|
2110
|
0 |
215 |
if (cval > 2147483647UL) croak("sieve_prime_cluster: values must be 31-bit"); |
|
2111
|
0 |
215 |
if (cval <= cl[i-1]) croak("sieve_prime_cluster: values must be increasing"); |
|
2118
|
32 |
0 |
if (list != 0) { |
|
2120
|
32 |
0 |
EXTEND(SP, (EXTEND_TYPE)nprimes); |
|
|
1 |
31 |
EXTEND(SP, (EXTEND_TYPE)nprimes); |
|
2121
|
12276 |
32 |
for (i = 0; i < nprimes; i++) |
|
2126
|
9 |
32 |
if (!done) { |
|
2140
|
14813 |
124 |
if (status == 1) { |
|
2141
|
4 |
14809 |
if (n < 3) { |
|
2143
|
14608 |
201 |
} else if (ix == 2 && !(n&1)) { |
|
|
7031 |
7577 |
} else if (ix == 2 && !(n&1)) { |
|
2145
|
2055 |
5723 |
} else if (items == 1) { |
|
2146
|
4 |
2051 |
ret = (ix == 0) ? is_pseudoprime(n, 2) : |
|
2147
|
36 |
2015 |
(ix == 1) ? is_euler_pseudoprime(n, 2) : |
|
2150
|
10747 |
1502 |
for (i = 1, ret = 1; i < items && ret == 1; i++) { |
|
|
6526 |
4221 |
for (i = 1, ret = 1; i < items && ret == 1; i++) { |
|
2152
|
0 |
6526 |
if (status != 1) break; |
|
2153
|
100 |
6426 |
ret = (ix == 0) ? is_pseudoprime(n, base) : |
|
2154
|
73 |
6353 |
(ix == 1) ? is_euler_pseudoprime(n, base) : |
|
2159
|
14811 |
126 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
14811 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
14811 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
2187
|
48475 |
1244 |
if (status == 1) { |
|
2204
|
0 |
2284 |
case 15: ret = is_mersenne_prime(n); if (ret == -1) status = 0; break; |
|
2208
|
48643 |
1076 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
48643 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
48643 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
2228
|
1066160 |
1 |
if (status == 1) { |
|
2230
|
14 |
6 |
case 0: if (items == 1) k = 0; |
|
2232
|
24 |
25 |
case 1: if (items == 1) k = 1; |
|
2234
|
1062628 |
3463 |
case 2: if (items == 1) k = 10; |
|
2236
|
0 |
1066091 |
if (ret < 0) status = 0; break; |
|
2240
|
1066160 |
1 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
1066160 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
1066160 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
2251
|
28 |
0 |
if (status != 0) |
|
2252
|
28 |
0 |
RETURN_NPARITY((status == 1) ? is_frobenius_pseudoprime(n, P, Q) : 0); |
|
|
28 |
0 |
RETURN_NPARITY((status == 1) ? is_frobenius_pseudoprime(n, P, Q) : 0); |
|
|
28 |
0 |
RETURN_NPARITY((status == 1) ? is_frobenius_pseudoprime(n, P, Q) : 0); |
|
2263
|
1 |
7 |
if (bases < 0) croak("miller_rabin_random: expected positive number of bases"); |
|
2265
|
0 |
6 |
if (status == -1) RETURN_NPARITY(0); |
|
|
0 |
0 |
if (status == -1) RETURN_NPARITY(0); |
|
|
0 |
0 |
if (status == -1) RETURN_NPARITY(0); |
|
2266
|
6 |
0 |
if (seed == 0 && status == 1) |
|
|
4 |
2 |
if (seed == 0 && status == 1) |
|
2267
|
4 |
0 |
RETURN_NPARITY( is_mr_random(MY_CXT.randcxt, n, bases) ); |
|
|
4 |
0 |
RETURN_NPARITY( is_mr_random(MY_CXT.randcxt, n, bases) ); |
|
2277
|
2 |
5 |
if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 ); |
|
|
1 |
1 |
if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 ); |
|
|
2 |
0 |
if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 ); |
|
|
2 |
0 |
if (a == 0) RETURN_NPARITY( ((b % 4) == 3) ? 2*is_prime(b) : 0 ); |
|
2278
|
2 |
3 |
if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 ); |
|
|
1 |
1 |
if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 ); |
|
|
2 |
0 |
if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 ); |
|
|
2 |
0 |
if (b == 0) RETURN_NPARITY( ((a % 4) == 3) ? 2*is_prime(a) : 0 ); |
|
2279
|
3 |
0 |
if (a < HALF_WORD && b < HALF_WORD) { |
|
|
3 |
0 |
if (a < HALF_WORD && b < HALF_WORD) { |
|
2281
|
3 |
0 |
if (UV_MAX-aa >= bb) |
|
2282
|
3 |
0 |
RETURN_NPARITY( 2*is_prime(aa+bb) ); |
|
|
3 |
0 |
RETURN_NPARITY( 2*is_prime(aa+bb) ); |
|
2302
|
63054 |
16 |
if (ix == 2 || ix == 3) { |
|
|
129 |
62925 |
if (ix == 2 || ix == 3) { |
|
2305
|
2 |
143 |
if (items == 0) XSRETURN_UNDEF; |
|
2306
|
62 |
81 |
if (items == 1) XSRETURN(1); |
|
2307
|
81 |
0 |
if (items > 1 && (status = _validate_and_set(&ret, aTHX_ ST(0), IFLAG_ANY))) { |
|
|
75 |
6 |
if (items > 1 && (status = _validate_and_set(&ret, aTHX_ ST(0), IFLAG_ANY))) { |
|
2309
|
173 |
75 |
for (i = 1; i < items; i++) { |
|
2311
|
0 |
173 |
if (status == 0) break; |
|
2312
|
21 |
152 |
if (( (sign == -1 && status == 1) || |
|
|
15 |
6 |
if (( (sign == -1 && status == 1) || |
|
|
83 |
90 |
if (( (sign == -1 && status == 1) || |
|
2313
|
102 |
65 |
(n >= ret && sign == status) |
|
|
92 |
10 |
(n >= ret && sign == status) |
|
2321
|
75 |
6 |
if (status != 0) { |
|
2325
|
4706 |
58219 |
} else if (ix == 4) { |
|
2328
|
202706 |
4688 |
for (ret = i = 0; i < items; i++) { |
|
2330
|
18 |
202688 |
if (status == 0) break; |
|
2331
|
202605 |
83 |
if (status == 1) hi += (n > (UV_MAX - lo)); |
|
2335
|
4688 |
18 |
if (status != 0 && hi != 0) { |
|
|
15 |
4673 |
if (status != 0 && hi != 0) { |
|
2336
|
12 |
3 |
if (hi == -1 && lo > IV_MAX) XSRETURN_IV((IV)lo); |
|
|
8 |
4 |
if (hi == -1 && lo > IV_MAX) XSRETURN_IV((IV)lo); |
|
2340
|
470 |
57749 |
} else if (ix == 5) { |
|
2343
|
2660 |
140 |
for (i = 0; i < items; i++) { |
|
2345
|
100 |
2560 |
if (status == 0) break; |
|
2346
|
2560 |
0 |
if (ret > 0 && n > UV_MAX/ret) { status = 0; break; } |
|
|
230 |
2330 |
if (ret > 0 && n > UV_MAX/ret) { status = 0; break; } |
|
2350
|
5 |
465 |
if (sign == -1 && status != 0) { |
|
|
2 |
3 |
if (sign == -1 && status != 0) { |
|
2351
|
0 |
2 |
if (ret <= (UV)IV_MAX) XSRETURN_IV(neg_iv(ret)); |
|
2356
|
57714 |
35 |
if (ix == 0) { ret = 0; nullv = 1; } |
|
2358
|
111046 |
42900 |
for (i = 0; i < items && ret != nullv && status != 0; i++) { |
|
|
101192 |
9854 |
for (i = 0; i < items && ret != nullv && status != 0; i++) { |
|
|
101190 |
2 |
for (i = 0; i < items && ret != nullv && status != 0; i++) { |
|
2360
|
4993 |
96197 |
if (status == 0) break; |
|
2361
|
53267 |
42930 |
if (i == 0) { |
|
2365
|
42883 |
47 |
if (ix == 0) { |
|
2369
|
43 |
4 |
if (n <= (UV_MAX / ret) ) ret *= n; |
|
2375
|
57563 |
5353 |
if (status != 0) |
|
2378
|
5350 |
3 |
if ((ix == 2 || ix == 3) && !sv_isobject(ST(0))) { |
|
|
3 |
5347 |
if ((ix == 2 || ix == 3) && !sv_isobject(ST(0))) { |
|
|
2 |
4 |
if ((ix == 2 || ix == 3) && !sv_isobject(ST(0))) { |
|
2385
|
2 |
2 |
for (i = 1; i < items; i++) { |
|
2387
|
2 |
0 |
if (strnum_minmax(minmax, aptr, alen, bptr, blen)) { |
|
2397
|
361 |
4990 |
if (ix == 0 || ix == 1) objectify_result(aTHX_ 0, ST(0)); |
|
|
7 |
354 |
if (ix == 0 || ix == 1) objectify_result(aTHX_ 0, ST(0)); |
|
2404
|
2 |
0 |
UV mask, i = 0; |
|
2406
|
2 |
0 |
CHECK_ARRAYREF(x); |
|
|
0 |
2 |
CHECK_ARRAYREF(x); |
|
2408
|
1 |
1 |
if (SvROK(svm) && SvTYPE(SvRV(svm)) == SVt_PVAV) { |
|
|
1 |
0 |
if (SvROK(svm) && SvTYPE(SvRV(svm)) == SVt_PVAV) { |
|
2411
|
1 |
0 |
USE_ARREF(mav, svm, SUBNAME, AR_READ); |
|
|
0 |
1 |
USE_ARREF(mav, svm, SUBNAME, AR_READ); |
|
|
0 |
1 |
USE_ARREF(mav, svm, SUBNAME, AR_READ); |
|
2412
|
5 |
1 |
for (j = 0; (Size_t)j < len_mav; j++) { |
|
2414
|
0 |
5 |
if (_validate_and_set(&mask, aTHX_ v, IFLAG_IV) == 0) |
|
2417
|
5 |
0 |
{ SV **v = av_fetch(av, index, 0); if (v) XPUSHs(*v); } |
|
|
0 |
5 |
{ SV **v = av_fetch(av, index, 0); if (v) XPUSHs(*v); } |
|
2419
|
1 |
0 |
} else if (_validate_and_set(&mask, aTHX_ svm, IFLAG_POS)) { |
|
2420
|
24 |
1 |
while (mask) { |
|
2421
|
13 |
11 |
if (mask & 1) { |
|
2423
|
13 |
0 |
if (v) XPUSHs(*v); |
|
|
0 |
13 |
if (v) XPUSHs(*v); |
|
2439
|
1 |
18 |
if (res == -1) |
|
2441
|
18 |
0 |
RETURN_NPARITY(res); |
|
|
18 |
0 |
RETURN_NPARITY(res); |
|
2455
|
8 |
146 |
if (ix == 0) { |
|
2462
|
2 |
152 |
if (items == 0) |
|
2465
|
579 |
152 |
for (i = 0; i < items; i++) { |
|
2468
|
577 |
2 |
if (status == 1 && n-min < (UV)items) |
|
|
493 |
84 |
if (status == 1 && n-min < (UV)items) |
|
2471
|
321 |
6 |
for (i = 0; i < items; i++) |
|
2472
|
146 |
175 |
if (setv[i] == 0) |
|
2484
|
1 |
66 |
if (items == 0) XSRETURN_UNDEF; |
|
2486
|
439 |
64 |
for (i = 0; i < items; i++) { |
|
2487
|
0 |
439 |
if (!_validate_and_set(&n, aTHX_ ST(i), IFLAG_POS | IFLAG_NONZERO)) break; |
|
2488
|
2 |
437 |
if (n == 1) { found1 = 1; break; } |
|
2491
|
64 |
2 |
if (i == items) { |
|
2494
|
1 |
62 |
if (fn == 0) XSRETURN_UNDEF; |
|
2495
|
60 |
2 |
if (fn != UV_MAX) XSRETURN_UV(fn); |
|
2498
|
2 |
0 |
if (found1) XSRETURN_IV(-1); |
|
2518
|
140 |
58 |
for (i = 0; i < items; i++) { |
|
2520
|
140 |
0 |
CHECK_ARRAYREF(ST(i)); |
|
|
0 |
140 |
CHECK_ARRAYREF(ST(i)); |
|
2522
|
0 |
140 |
if (av_count(av) != 2) croak("%s: expected 2-element array reference",SUBNAME); |
|
2525
|
140 |
0 |
if (psva == 0 || psvn == 0) { status = 0; break; } |
|
|
0 |
140 |
if (psva == 0 || psvn == 0) { status = 0; break; } |
|
2526
|
66 |
74 |
if (i == 0) svfirstmod = *psvn; |
|
2529
|
140 |
0 |
if (astatus == 0 || nstatus == 0) { status = 0; break; } |
|
|
0 |
140 |
if (astatus == 0 || nstatus == 0) { status = 0; break; } |
|
2530
|
10 |
130 |
if (an[i+items] == 0) { |
|
2531
|
0 |
10 |
XPUSHs(&PL_sv_undef); |
|
2532
|
5 |
5 |
if (ix == 1) XPUSHs(&PL_sv_undef); |
|
|
0 |
5 |
if (ix == 1) XPUSHs(&PL_sv_undef); |
|
2537
|
58 |
0 |
if (status) |
|
2540
|
46 |
12 |
if (status) { |
|
2541
|
23 |
23 |
if (ix == 0) { |
|
2542
|
2 |
21 |
if (status < 0) XSRETURN_UNDEF; |
|
2545
|
2 |
21 |
if (status < 0) { |
|
2546
|
0 |
2 |
XPUSHs(&PL_sv_undef); |
|
2547
|
0 |
2 |
XPUSHs(&PL_sv_undef); |
|
2549
|
0 |
21 |
XPUSHs(sv_2mortal(newSVuv( ret ))); |
|
2550
|
0 |
21 |
XPUSHs(sv_2mortal(newSVuv( lcm ))); |
|
2556
|
7 |
5 |
if (ix == 0) objectify_result(aTHX_ svfirstmod, ST(0)); |
|
2565
|
1 |
14 |
if (!cornacchia(&x, &y, d, n)) XSRETURN_UNDEF; |
|
2577
|
0 |
0 |
if (items != 4) croak("lucas_sequence: n, P, Q, k"); |
|
2579
|
0 |
0 |
_validate_and_set(&P, aTHX_ ST(1), IFLAG_ANY | IFLAG_IV) && |
|
2580
|
0 |
0 |
_validate_and_set(&Q, aTHX_ ST(2), IFLAG_ANY | IFLAG_IV) && |
|
2588
|
0 |
0 |
OBJECTIFY_STACK(3); |
|
|
0 |
0 |
OBJECTIFY_STACK(3); |
|
|
0 |
0 |
OBJECTIFY_STACK(3); |
|
|
0 |
0 |
OBJECTIFY_STACK(3); |
|
|
0 |
0 |
OBJECTIFY_STACK(3); |
|
2602
|
26705 |
3 |
if ((pstatus != 0) && (qstatus != 0) && |
|
2603
|
26692 |
3 |
_validate_and_set(&k, aTHX_ svk, IFLAG_POS) && |
|
2606
|
0 |
26692 |
if (n == 0) XSRETURN_UNDEF; |
|
2607
|
26677 |
15 |
P = (pstatus == 1) ? P % n : ivmod((IV)P,n); |
|
2608
|
235 |
26457 |
Q = (qstatus == 1) ? Q % n : ivmod((IV)Q,n); |
|
2620
|
3 |
13 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
19 |
0 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
4 |
15 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
0 |
4 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
19 |
16 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
0 |
16 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
2621
|
3 |
13 |
XSRETURN(ix==0 ? 2 : 1); |
|
2633
|
693 |
0 |
_validate_and_set((UV*)&Q, aTHX_ svq, IFLAG_IV) && |
|
2634
|
621 |
72 |
_validate_and_set(&k, aTHX_ svk, IFLAG_POS) && |
|
2636
|
289 |
332 |
if (ix == 1) XSRETURN_IV(U); /* U = lucasu(P,Q,k) */ |
|
2637
|
242 |
90 |
if (ix == 2) XSRETURN_IV(V); /* V = lucasv(P,Q,k) */ |
|
2642
|
26 |
52 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
104 |
0 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
18 |
86 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
0 |
18 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
104 |
78 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
|
0 |
78 |
OBJECTIFY_STACK(ix==0 ? 2 : 1); |
|
2643
|
26 |
52 |
XSRETURN(ix==0 ? 2 : 1); |
|
2653
|
298 |
1 |
if (status != 0) { |
|
2661
|
298 |
0 |
RETURN_NPARITY(ret); |
|
|
298 |
0 |
RETURN_NPARITY(ret); |
|
2684
|
59577 |
196 |
if (status == 1) { |
|
2698
|
184 |
12 |
} else if (status == -1) { |
|
2705
|
59761 |
12 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
59761 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
|
59761 |
0 |
if (status != 0) RETURN_NPARITY(ret); |
|
2715
|
1 |
8 |
if (status == -1) |
|
2717
|
8 |
0 |
if (status == 1) |
|
2732
|
98 |
116839 |
if (status == -1) { |
|
2734
|
2 |
96 |
if (ix == 2) |
|
2737
|
116927 |
8 |
if (status != 0) { |
|
2745
|
111277 |
5650 |
if (ix == 0) |
|
2746
|
111277 |
0 |
RETURN_NPARITY(res); |
|
|
111277 |
0 |
RETURN_NPARITY(res); |
|
2747
|
1013 |
4637 |
if (res != 0 || n == 0) |
|
|
21 |
992 |
if (res != 0 || n == 0) |
|
2762
|
1122 |
0 |
if (status != 0) { |
|
2763
|
0 |
1122 |
if (status == -1) |
|
2765
|
1115 |
7 |
if (ix == 0) { |
|
2769
|
7 |
0 |
if (n == 0 || k < 2) |
|
|
0 |
7 |
if (n == 0 || k < 2) |
|
2772
|
7 |
0 |
if (res != 0) |
|
2789
|
10500 |
289 |
if (status != 0) { |
|
2790
|
61 |
10439 |
if (k != 0) { |
|
2791
|
14 |
47 |
if (status == -1) { |
|
2792
|
2 |
12 |
if (k % 2 == 0) RETURN_NPARITY(0); /* negative n even k return 0 */ |
|
|
2 |
0 |
if (k % 2 == 0) RETURN_NPARITY(0); /* negative n even k return 0 */ |
|
|
2 |
0 |
if (k % 2 == 0) RETURN_NPARITY(0); /* negative n even k return 0 */ |
|
2797
|
61 |
10378 |
if (status == -1) |
|
2800
|
10406 |
33 |
ret = (n <= 1) ? 0 : powerof_ret(n, &root); |
|
2801
|
61 |
10378 |
if (status == -1 && ret > 0 && ret % 2 == 0) { |
|
|
51 |
10 |
if (status == -1 && ret > 0 && ret % 2 == 0) { |
|
|
27 |
24 |
if (status == -1 && ret > 0 && ret % 2 == 0) { |
|
2804
|
11 |
16 |
if (ret == 1) ret = 0; |
|
2805
|
16 |
11 |
if (ret) root = ipow(root,1U << v); |
|
2808
|
199 |
10299 |
if (ret && svroot != 0) { |
|
|
29 |
170 |
if (ret && svroot != 0) { |
|
2809
|
0 |
29 |
if (!SvROK(svroot)) croak("is_power: third argument not a scalar reference"); |
|
2810
|
11 |
18 |
SETSVINT(SvRV(svroot), status == 1, root, -(IV)root); |
|
2812
|
10498 |
0 |
RETURN_NPARITY(ret); |
|
|
10498 |
0 |
RETURN_NPARITY(ret); |
|
2824
|
10549 |
10 |
if (status != 0) { |
|
2825
|
10549 |
0 |
ret = (status == 1) ? prime_power(n, &root) : 0; |
|
2826
|
2894 |
7655 |
if (ret && svroot != 0) { |
|
|
14 |
2880 |
if (ret && svroot != 0) { |
|
2827
|
0 |
14 |
if (!SvROK(svroot))croak("is_prime_power: second argument not a scalar reference"); |
|
2830
|
10549 |
0 |
RETURN_NPARITY(ret); |
|
|
10549 |
0 |
RETURN_NPARITY(ret); |
|
2841
|
12652 |
12653 |
if (svroot != 0 && !SvROK(svroot)) |
|
|
0 |
12652 |
if (svroot != 0 && !SvROK(svroot)) |
|
2843
|
0 |
25305 |
if (k < 3) |
|
2847
|
1 |
25304 |
if (status == -1) |
|
2848
|
1 |
0 |
RETURN_NPARITY(0); |
|
|
1 |
0 |
RETURN_NPARITY(0); |
|
2849
|
25302 |
2 |
if (status == 1) { |
|
2852
|
25301 |
1 |
UV result = (n == 0) || root; |
|
|
461 |
24840 |
UV result = (n == 0) || root; |
|
2853
|
25302 |
0 |
if (!overflow) { |
|
2854
|
462 |
24840 |
if (result && svroot != 0) |
|
|
232 |
230 |
if (result && svroot != 0) |
|
2856
|
25302 |
0 |
RETURN_NPARITY(result); |
|
|
25302 |
0 |
RETURN_NPARITY(result); |
|
2867
|
53 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
2868
|
53 |
0 |
if (n < MPU_MAX_PRIME_IDX) /* Fall through to Perl if out of range. */ |
|
2876
|
0 |
4 |
RETVAL = ld_inverse_li(x); |
|
2888
|
256 |
0 |
if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
2889
|
255 |
1 |
n <= MPU_MAX_PRIME_IDX ) { |
|
2890
|
2 |
253 |
if (n == 0) XSRETURN_UNDEF; |
|
2911
|
193 |
0 |
if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
2912
|
193 |
0 |
n <= MPU_MAX_PRIME_IDX ) { |
|
2913
|
4 |
189 |
if (n == 0) XSRETURN_UNDEF; |
|
2934
|
181 |
0 |
if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
2935
|
180 |
1 |
n <= MPU_MAX_PERFECT_POW_IDX ) { |
|
2936
|
0 |
180 |
if (n == 0) XSRETURN_UNDEF; |
|
2958
|
225 |
0 |
if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
2959
|
225 |
0 |
n <= MPU_MAX_RMJN_PRIME_IDX ) { |
|
2960
|
0 |
225 |
if (n == 0) XSRETURN_UNDEF; |
|
2979
|
63 |
0 |
if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
2980
|
63 |
0 |
n <= MPU_MAX_TWIN_PRIME_IDX ) { |
|
2981
|
1 |
62 |
if (n == 0) XSRETURN_UNDEF; |
|
2982
|
53 |
9 |
switch (ix) { |
|
2998
|
2677 |
0 |
if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
2999
|
2677 |
0 |
n <= MPU_MAX_SEMI_PRIME_IDX ) { |
|
3000
|
1 |
2676 |
if (n == 0) XSRETURN_UNDEF; |
|
3001
|
2672 |
4 |
switch (ix) { |
|
3019
|
516 |
0 |
if ( _validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
3020
|
516 |
0 |
n <= MPU_MAX_LUCKY_IDX ) { |
|
3021
|
4 |
512 |
if (n == 0) XSRETURN_UNDEF; |
|
3041
|
12484 |
18 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS) |
|
3042
|
8735 |
3749 |
&& !(ix == 0 && n >= MPU_MAX_PRIME)) { |
|
|
8731 |
4 |
&& !(ix == 0 && n >= MPU_MAX_PRIME)) { |
|
3049
|
5 |
12475 |
if (ret == 0) XSRETURN_UNDEF; |
|
3062
|
110 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS) |
|
3063
|
54 |
56 |
&& !(ix == 0 && n >= MPU_MAX_PRIME)) { |
|
|
54 |
0 |
&& !(ix == 0 && n >= MPU_MAX_PRIME)) { |
|
3070
|
4 |
106 |
if (ret == 0) XSRETURN_UNDEF; |
|
3082
|
49 |
18 |
if (status == 1) { |
|
3084
|
48 |
1 |
if (n != 0) XSRETURN_UV(n); |
|
3085
|
17 |
1 |
} else if (status == -1) { /* next perfect power: negative n */ |
|
3099
|
48 |
24 |
if (status == 1) { |
|
3100
|
3 |
45 |
if (n == 0) XSRETURN_IV(-1); |
|
3103
|
17 |
7 |
} else if (status == -1) { /* prev perfect power: negative n */ |
|
3105
|
17 |
0 |
if (n > 0 && n <= (UV)IV_MAX) |
|
|
16 |
1 |
if (n > 0 && n <= (UV)IV_MAX) |
|
3116
|
36 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
3118
|
36 |
0 |
if (ret != 0) XSRETURN_UV(ret); |
|
3151
|
117 |
844 |
if (minarg > 0 && bits < minarg) |
|
|
8 |
109 |
if (minarg > 0 && bits < minarg) |
|
3154
|
920 |
33 |
if (bits <= BITS_PER_WORD) { |
|
3168
|
4 |
916 |
if (res || ix == 0) XSRETURN_UV(res); |
|
|
1 |
3 |
if (res || ix == 0) XSRETURN_UV(res); |
|
3170
|
3 |
33 |
DISPATCHPP_GMPONLYIF(ix != 1 || bits != uvmax_maxlen); |
|
|
2 |
1 |
DISPATCHPP_GMPONLYIF(ix != 1 || bits != uvmax_maxlen); |
|
3178
|
305 |
23 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
3194
|
346 |
2 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
3202
|
61 |
285 |
if (r != 0 || n == 0) |
|
|
1 |
60 |
if (r != 0 || n == 0) |
|
3213
|
1 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO)) { |
|
3220
|
3 |
1 |
for (f = 0; f < nf; f++) |
|
3221
|
0 |
3 |
av_push(av, newSVuv(F[flip ? nf-1-f : f])); |
|
3222
|
0 |
1 |
XPUSHs(sv_2mortal(newSVuv( r ))); |
|
3223
|
0 |
1 |
XPUSHs(sv_2mortal(newRV_noinc( (SV*) av ))); |
|
3238
|
38 |
15 |
if (nstatus == 1 && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) { |
|
|
38 |
0 |
if (nstatus == 1 && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) { |
|
3241
|
38 |
0 |
EXTEND(SP, (EXTEND_TYPE)steps); |
|
|
0 |
38 |
EXTEND(SP, (EXTEND_TYPE)steps); |
|
3242
|
280 |
38 |
for (i = 0; i < steps; i++) |
|
3261
|
52 |
1 |
if (items > 0) { |
|
3265
|
433 |
13 |
for (i = 1; nstatus == 1 && i < (size_t) items; i++) { |
|
|
398 |
35 |
for (i = 1; nstatus == 1 && i < (size_t) items; i++) { |
|
3266
|
1 |
397 |
if (!_validate_and_set(&n, aTHX_ ST(i), IFLAG_POS | IFLAG_NONZERO)) |
|
3269
|
396 |
1 |
overflow = (UV_MAX/n < cfA1) || (UV_MAX/n < cfB1); |
|
|
1 |
395 |
overflow = (UV_MAX/n < cfA1) || (UV_MAX/n < cfB1); |
|
3270
|
2 |
395 |
if (overflow) break; |
|
3273
|
395 |
0 |
overflow = (UV_MAX-cfAn < cfA0) || (UV_MAX-cfBn < cfB0); |
|
|
1 |
394 |
overflow = (UV_MAX-cfAn < cfA0) || (UV_MAX-cfBn < cfB0); |
|
3274
|
1 |
394 |
if (overflow) break; |
|
3280
|
13 |
39 |
if (i < (size_t) items) /* Covers overflow */ |
|
3283
|
36 |
17 |
if (nstatus == 1) { |
|
3284
|
0 |
36 |
XPUSHs(sv_2mortal(newSVuv( cfA1 ))); |
|
3285
|
0 |
36 |
XPUSHs(sv_2mortal(newSVuv( cfB1 ))); |
|
3298
|
198 |
0 |
if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) { |
|
|
198 |
0 |
if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) { |
|
3304
|
198 |
0 |
if (status) { |
|
3305
|
0 |
198 |
XPUSHs(sv_2mortal(newSVuv( num ))); |
|
3306
|
0 |
198 |
XPUSHs(sv_2mortal(newSVuv( den ))); |
|
3319
|
220 |
0 |
if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) { |
|
|
220 |
0 |
if (_validate_and_set(&num, aTHX_ svnum, IFLAG_POS | IFLAG_NONZERO) && _validate_and_set(&den, aTHX_ svden, IFLAG_POS | IFLAG_NONZERO)) { |
|
3325
|
214 |
6 |
if (n) XSRETURN_UV(n); |
|
3337
|
214 |
6 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO)) { |
|
3343
|
214 |
0 |
if (status) { |
|
3344
|
0 |
214 |
XPUSHs(sv_2mortal(newSVuv( num ))); |
|
3345
|
0 |
214 |
XPUSHs(sv_2mortal(newSVuv( den ))); |
|
3356
|
340 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) |
|
3367
|
128 |
23 |
if (wantsingle) { |
|
3368
|
0 |
128 |
if (!_validate_and_set(&k, aTHX_ svk, IFLAG_POS)) |
|
3371
|
151 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO)) { |
|
3372
|
23 |
128 |
if (!wantsingle && GIMME_V != G_ARRAY) |
|
|
13 |
10 |
if (!wantsingle && GIMME_V != G_ARRAY) |
|
3374
|
138 |
0 |
if (n <= UVCONST(4294967295)) { |
|
3375
|
128 |
10 |
if (wantsingle) { |
|
3378
|
9 |
119 |
if (kresult == 0) XSRETURN_UNDEF; |
|
3379
|
119 |
0 |
if (kresult == 1) { |
|
3386
|
10 |
0 |
if (len > 0) { |
|
3387
|
10 |
0 |
EXTEND(SP, (EXTEND_TYPE)len); |
|
|
0 |
10 |
EXTEND(SP, (EXTEND_TYPE)len); |
|
3388
|
114 |
10 |
for (i = 0; i < len; i++) |
|
3410
|
1009 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS | IFLAG_NONZERO) && |
|
3411
|
1009 |
0 |
n <= UVCONST(4294967295)) { |
|
3412
|
1009 |
0 |
CHECK_ARRAYREF(svfrac); |
|
|
0 |
1009 |
CHECK_ARRAYREF(svfrac); |
|
3414
|
0 |
1009 |
if (av_count(av) != 2) croak("%s: expected 2-element array reference", SUBNAME); |
|
3418
|
1009 |
0 |
if (psvp == 0 || psvq == 0) |
|
|
0 |
1009 |
if (psvp == 0 || psvq == 0) |
|
3420
|
1009 |
0 |
if (status != 0) |
|
3422
|
1009 |
0 |
if (status != 0) |
|
3424
|
1009 |
0 |
if (status != 0 && p64 >= q64) { |
|
|
22 |
987 |
if (status != 0 && p64 >= q64) { |
|
3425
|
11 |
11 |
if (ix == 0) XSRETURN_UNDEF; |
|
3428
|
987 |
0 |
if (status != 0) { |
|
3430
|
987 |
0 |
if (p != p64 || q != q64) |
|
|
0 |
987 |
if (p != p64 || q != q64) |
|
3433
|
987 |
0 |
if (status != 0) { |
|
3434
|
110 |
877 |
if (ix == 1) |
|
3437
|
877 |
0 |
if (next_farey(n, &p, &q)) { |
|
3460
|
0 |
1001 |
const NV pival = 3.141592653589793238462643383279502884197169; |
|
3463
|
1 |
1000 |
if (digits == 0) { |
|
3465
|
15 |
985 |
} else if (digits <= mantsize) { |
|
3481
|
114 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS) != 0) { |
|
3482
|
60 |
54 |
if (ix == 0) { |
|
3484
|
41 |
19 |
if (bernfrac(&num, &den, n)) { |
|
3485
|
0 |
41 |
XPUSHs(sv_2mortal(newSViv( num ))); |
|
3486
|
0 |
41 |
XPUSHs(sv_2mortal(newSVuv( den ))); |
|
3491
|
52 |
2 |
if (harmfrac(&num, &den, n)) { |
|
3492
|
0 |
52 |
XPUSHs(sv_2mortal(newSVuv( num ))); |
|
3493
|
0 |
52 |
XPUSHs(sv_2mortal(newSVuv( den ))); |
|
3499
|
42 |
0 |
OBJECTIFY_STACK(2); |
|
|
28 |
14 |
OBJECTIFY_STACK(2); |
|
|
0 |
28 |
OBJECTIFY_STACK(2); |
|
|
42 |
21 |
OBJECTIFY_STACK(2); |
|
|
0 |
21 |
OBJECTIFY_STACK(2); |
|
3507
|
0 |
972 |
if (digits <= 0) XSRETURN_EMPTY; |
|
3509
|
0 |
972 |
XPUSHs(sv_2mortal(newSVpvn(out, digits+1))); |
|
3520
|
114 |
0 |
if (status == 1) { |
|
3521
|
104 |
10 |
if (gimme_v == G_SCALAR) { |
|
3523
|
10 |
0 |
} else if (gimme_v == G_ARRAY) { |
|
3525
|
10 |
0 |
if (ntotients != UV_MAX) { |
|
3526
|
10 |
0 |
EXTEND(SP, (EXTEND_TYPE)ntotients); |
|
|
0 |
10 |
EXTEND(SP, (EXTEND_TYPE)ntotients); |
|
3527
|
45 |
10 |
for (i = 0; i < ntotients; i++) |
|
3549
|
1618 |
131 |
if (status == 1) { |
|
3550
|
1031 |
587 |
if (ix == 0) { |
|
3553
|
341 |
690 |
if (gimme_v == G_SCALAR) |
|
3555
|
0 |
690 |
EXTEND(SP, (EXTEND_TYPE)nfactors); |
|
3556
|
1471 |
690 |
for (i = 0; i < nfactors; i++) |
|
3560
|
12 |
575 |
if (gimme_v == G_SCALAR) |
|
3562
|
0 |
575 |
EXTEND(SP, (EXTEND_TYPE)nf.nfactors); |
|
3563
|
1316 |
575 |
for (i = 0; i < nf.nfactors; i++) |
|
3578
|
973 |
8 |
if (status == 1 && svk != 0) { |
|
|
9 |
964 |
if (status == 1 && svk != 0) { |
|
3580
|
2 |
7 |
if (k > n) k = n; |
|
3582
|
8 |
973 |
if (status != 1) { |
|
3586
|
973 |
0 |
if (GIMME_V == G_VOID) { |
|
3588
|
21 |
952 |
} else if (GIMME_V == G_SCALAR && k >= n) { |
|
|
21 |
0 |
} else if (GIMME_V == G_SCALAR && k >= n) { |
|
3593
|
0 |
952 |
if (GIMME_V == G_SCALAR) { |
|
3596
|
952 |
0 |
EXTEND(SP, (EXTEND_TYPE)ndivisors); |
|
|
1 |
951 |
EXTEND(SP, (EXTEND_TYPE)ndivisors); |
|
3597
|
5831 |
952 |
for (i = 0; i < ndivisors; i++) |
|
3622
|
113 |
87 |
if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) || ix == 10) { |
|
|
0 |
113 |
if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) || ix == 10) { |
|
3626
|
0 |
113 |
if (n == 0) XSRETURN_UV(0); |
|
3628
|
10 |
103 |
arg1 = (items >= 2) ? my_svuv(ST(1)) : default_arg1[ix]; |
|
3629
|
1 |
112 |
arg2 = (items >= 3) ? my_svuv(ST(2)) : 0; |
|
3631
|
0 |
62 |
while ( (n% 2) == 0 ) { n /= 2; XPUSHs(sv_2mortal(newSVuv( 2 ))); } |
|
|
62 |
113 |
while ( (n% 2) == 0 ) { n /= 2; XPUSHs(sv_2mortal(newSVuv( 2 ))); } |
|
3632
|
0 |
60 |
while ( (n% 3) == 0 ) { n /= 3; XPUSHs(sv_2mortal(newSVuv( 3 ))); } |
|
|
60 |
113 |
while ( (n% 3) == 0 ) { n /= 3; XPUSHs(sv_2mortal(newSVuv( 3 ))); } |
|
3633
|
0 |
81 |
while ( (n% 5) == 0 ) { n /= 5; XPUSHs(sv_2mortal(newSVuv( 5 ))); } |
|
|
81 |
113 |
while ( (n% 5) == 0 ) { n /= 5; XPUSHs(sv_2mortal(newSVuv( 5 ))); } |
|
3634
|
63 |
50 |
if (n == 1) { /* done */ } |
|
3635
|
33 |
30 |
else if (is_prime(n)) { XPUSHs(sv_2mortal(newSVuv( n ))); } |
|
|
0 |
33 |
else if (is_prime(n)) { XPUSHs(sv_2mortal(newSVuv( n ))); } |
|
3648
|
2 |
0 |
case 8: if (items < 3) arg2 = 1; |
|
3651
|
5 |
1 |
default: if (items < 3) arg2 = 10*arg1; |
|
3654
|
30 |
0 |
EXTEND(SP, (EXTEND_TYPE)nfactors); |
|
|
0 |
30 |
EXTEND(SP, (EXTEND_TYPE)nfactors); |
|
3655
|
59 |
30 |
for (i = 0; i < nfactors; i++) |
|
3665
|
92 |
2328 |
if (items == 1) { |
|
3666
|
91 |
1 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
3668
|
88 |
3 |
if (n <= 1 || sigma != 0) |
|
|
88 |
0 |
if (n <= 1 || sigma != 0) |
|
3673
|
918 |
1410 |
if ( (!SvROK(svk) || (SvROK(svk) && SvTYPE(SvRV(svk)) != SVt_PVCV)) && |
|
|
918 |
0 |
if ( (!SvROK(svk) || (SvROK(svk) && SvTYPE(SvRV(svk)) != SVt_PVCV)) && |
|
3674
|
1408 |
0 |
_validate_and_set(&n, aTHX_ svn, IFLAG_POS) && |
|
3677
|
1047 |
361 |
if (n <= 1 || sigma != 0) |
|
|
1047 |
0 |
if (n <= 1 || sigma != 0) |
|
3698
|
12289 |
1 |
if (astatus != 0 && nstatus != 0) { |
|
|
2 |
12287 |
if (astatus != 0 && nstatus != 0) { |
|
3701
|
22 |
468 |
if (ret == 0 && n > 1) |
|
|
22 |
0 |
if (ret == 0 && n > 1) |
|
3705
|
22 |
10779 |
if (ret == 0 && a > 0) |
|
|
12 |
10 |
if (ret == 0 && a > 0) |
|
3708
|
901 |
1 |
case 2: if (a < 1 || n < 1) XSRETURN_IV(0); |
|
|
1 |
900 |
case 2: if (a < 1 || n < 1) XSRETURN_IV(0); |
|
3712
|
676 |
224 |
if (m == 0 || a == g) RETURN_NPARITY(m); |
|
|
391 |
285 |
if (m == 0 || a == g) RETURN_NPARITY(m); |
|
|
615 |
0 |
if (m == 0 || a == g) RETURN_NPARITY(m); |
|
|
615 |
0 |
if (m == 0 || a == g) RETURN_NPARITY(m); |
|
3739
|
97 |
0 |
k < BITS_PER_WORD) { |
|
3765
|
22 |
2 |
k < BITS_PER_WORD) { |
|
3767
|
22 |
0 |
if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF; |
|
|
0 |
22 |
if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF; |
|
|
0 |
0 |
if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF; |
|
3769
|
22 |
0 |
if (max > 0 && n <= max) { |
|
|
21 |
1 |
if (max > 0 && n <= max) { |
|
3776
|
21 |
0 |
if (ret != 0) XSRETURN_UV(ret); |
|
3788
|
216 |
0 |
k < 16) { |
|
3789
|
205 |
11 |
if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF; |
|
|
4 |
201 |
if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF; |
|
|
3 |
1 |
if (n == 0 || (k == 0 && n > 1)) XSRETURN_UNDEF; |
|
3791
|
202 |
0 |
if (max > 0 && n <= max) { |
|
|
202 |
0 |
if (max > 0 && n <= max) { |
|
3810
|
817 |
47 |
if (astatus != 0 && gstatus != 0 && nstatus != 0) { |
|
|
643 |
174 |
if (astatus != 0 && gstatus != 0 && nstatus != 0) { |
|
|
527 |
116 |
if (astatus != 0 && gstatus != 0 && nstatus != 0) { |
|
3811
|
45 |
482 |
if (n == 0) XSRETURN_UNDEF; |
|
3812
|
44 |
438 |
if (n == 1) XSRETURN_UV(0); |
|
3815
|
328 |
110 |
if (ix == 0) { |
|
3817
|
313 |
15 |
if (!retundef) ret = powmod(a, g, n); |
|
3819
|
108 |
2 |
retundef = !(prep_pow_inv(&a,&g,gstatus,n) && rootmod(&ret,a,g,n)); |
|
|
38 |
70 |
retundef = !(prep_pow_inv(&a,&g,gstatus,n) && rootmod(&ret,a,g,n)); |
|
3821
|
55 |
383 |
if (retundef) XSRETURN_UNDEF; |
|
3841
|
22087 |
5472 |
if (astatus != 0 && bstatus != 0 && nstatus != 0) { |
|
|
21496 |
591 |
if (astatus != 0 && bstatus != 0 && nstatus != 0) { |
|
|
14870 |
6626 |
if (astatus != 0 && bstatus != 0 && nstatus != 0) { |
|
3842
|
112 |
14758 |
if (n == 0) XSRETURN_UNDEF; |
|
3843
|
114 |
14644 |
if (n == 1) XSRETURN_UV(0); |
|
3852
|
28 |
80 |
if (b == 0) retundef = 1; |
|
3856
|
5 |
17 |
if (ret == 0 && (b == 0 || a != 1)) retundef = 1; |
|
|
5 |
0 |
if (ret == 0 && (b == 0 || a != 1)) retundef = 1; |
|
|
3 |
2 |
if (ret == 0 && (b == 0 || a != 1)) retundef = 1; |
|
3860
|
31 |
14613 |
if (retundef) XSRETURN_UNDEF; |
|
3878
|
26375 |
18689 |
if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) { |
|
|
25907 |
468 |
if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) { |
|
|
25855 |
52 |
if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) { |
|
|
16774 |
9081 |
if (astatus != 0 && bstatus != 0 && cstatus != 0 && nstatus != 0) { |
|
3879
|
0 |
16774 |
if (n == 0) XSRETURN_UNDEF; |
|
3880
|
0 |
16774 |
if (n == 1) XSRETURN_UV(0); |
|
3884
|
13102 |
3672 |
ret = (ix==0) ? muladdmod(a,b,c,n) : mulsubmod(a,b,c,n); |
|
3899
|
22167 |
1 |
if (nstatus != 0 && kstatus != 0 && mstatus != 0) { |
|
|
22167 |
0 |
if (nstatus != 0 && kstatus != 0 && mstatus != 0) { |
|
|
22167 |
0 |
if (nstatus != 0 && kstatus != 0 && mstatus != 0) { |
|
3900
|
0 |
22167 |
if (m == 0) XSRETURN_UNDEF; |
|
3901
|
820 |
21347 |
if (m == 1) XSRETURN_UV(0); |
|
3902
|
21344 |
3 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
|
21343 |
1 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
|
21341 |
2 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
|
3 |
21341 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
3903
|
1 |
2 |
(nstatus ==-1 && (kstatus == -1 && k > n)) ) |
|
|
0 |
1 |
(nstatus ==-1 && (kstatus == -1 && k > n)) ) |
|
3905
|
1 |
21343 |
if (kstatus == -1) k = n - k; |
|
3906
|
3 |
21341 |
if (nstatus == -1) n = neg_iv(n) + k - 1; |
|
3907
|
21344 |
0 |
if (binomialmod(&ret, n, k, m)) { |
|
3908
|
3 |
21341 |
if ((nstatus == -1) && (k & 1) && ret != 0) ret = m-ret; |
|
|
1 |
2 |
if ((nstatus == -1) && (k & 1) && ret != 0) ret = m-ret; |
|
|
1 |
0 |
if ((nstatus == -1) && (k & 1) && ret != 0) ret = m-ret; |
|
3922
|
824 |
1 |
if (astatus != 0 && nstatus != 0) { |
|
|
823 |
1 |
if (astatus != 0 && nstatus != 0) { |
|
3923
|
0 |
823 |
if (n == 0) XSRETURN_UNDEF; |
|
3924
|
1 |
822 |
if (n == 1) XSRETURN_UV(0); |
|
3942
|
384 |
19 |
if (astatus != 0 && nstatus != 0) { |
|
|
269 |
115 |
if (astatus != 0 && nstatus != 0) { |
|
3943
|
11 |
258 |
if (n == 0) XSRETURN_UNDEF; |
|
3944
|
13 |
245 |
if (n == 1) XSRETURN_UV((ix==1) ? 1 : 0); /* znorder different */ |
|
3954
|
24 |
221 |
if (retok == 0) XSRETURN_UNDEF; |
|
3968
|
36 |
2 |
if (astatus != 0 && nstatus != 0) { |
|
|
36 |
0 |
if (astatus != 0 && nstatus != 0) { |
|
3969
|
2 |
34 |
if (n == 0) XSRETURN_EMPTY; |
|
3972
|
27 |
7 |
if (roots != 0) { |
|
3973
|
0 |
27 |
if (GIMME_V != G_ARRAY) { |
|
3976
|
27 |
0 |
EXTEND(SP, (EXTEND_TYPE)numr); |
|
|
0 |
27 |
EXTEND(SP, (EXTEND_TYPE)numr); |
|
3977
|
80 |
27 |
for (i = 0; i < numr; i++) |
|
3995
|
51 |
1 |
if (astatus != 0 && gstatus != 0 && nstatus != 0) { |
|
|
51 |
0 |
if (astatus != 0 && gstatus != 0 && nstatus != 0) { |
|
|
50 |
1 |
if (astatus != 0 && gstatus != 0 && nstatus != 0) { |
|
3996
|
1 |
49 |
if (n == 0) XSRETURN_EMPTY; |
|
3998
|
2 |
47 |
if (!prep_pow_inv(&a,&g,gstatus,n)) XSRETURN_EMPTY; |
|
4000
|
36 |
11 |
if (roots != 0) { |
|
4001
|
0 |
36 |
if (GIMME_V != G_ARRAY) { |
|
4004
|
36 |
0 |
EXTEND(SP, (EXTEND_TYPE)numr); |
|
|
0 |
36 |
EXTEND(SP, (EXTEND_TYPE)numr); |
|
4005
|
224 |
36 |
for (i = 0; i < numr; i++) |
|
4022
|
39 |
0 |
if (astatus != 0 && nstatus != 0) { |
|
|
33 |
6 |
if (astatus != 0 && nstatus != 0) { |
|
4023
|
1 |
32 |
if (n == 0) XSRETURN_UNDEF; |
|
4025
|
32 |
0 |
RETURN_NPARITY( is_primitive_root(a,n,0) ); |
|
|
32 |
0 |
RETURN_NPARITY( is_primitive_root(a,n,0) ); |
|
4036
|
64 |
7 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS)) { |
|
4037
|
1 |
63 |
if (n == 0) XSRETURN_UNDEF; |
|
4038
|
35 |
28 |
if (ix == 0) { |
|
4042
|
4 |
24 |
if (r == 0 && n != 1) XSRETURN_UNDEF; |
|
|
3 |
1 |
if (r == 0 && n != 1) XSRETURN_UNDEF; |
|
4044
|
57 |
3 |
if (r < 100) RETURN_NPARITY(r); |
|
|
57 |
0 |
if (r < 100) RETURN_NPARITY(r); |
|
|
57 |
0 |
if (r < 100) RETURN_NPARITY(r); |
|
4060
|
590 |
593 |
RETURN_NPARITY( (ix == 0) ? is_smooth(n,k) : is_rough(n,k) ); |
|
|
1183 |
0 |
RETURN_NPARITY( (ix == 0) ? is_smooth(n,k) : is_rough(n,k) ); |
|
|
1183 |
0 |
RETURN_NPARITY( (ix == 0) ? is_smooth(n,k) : is_rough(n,k) ); |
|
4075
|
11281 |
0 |
if (kstatus != 0 && nstatus != 0) { |
|
|
11277 |
4 |
if (kstatus != 0 && nstatus != 0) { |
|
4077
|
11277 |
0 |
: (ix == 0) ? is_omega_prime(k, n) |
|
4078
|
615 |
10662 |
: is_almost_prime(k, n); |
|
4079
|
11277 |
0 |
RETURN_NPARITY(res); |
|
|
11277 |
0 |
RETURN_NPARITY(res); |
|
4092
|
43 |
450292 |
ret = d==0 ? (n==0) : n % d == 0; |
|
4093
|
9 |
450335 |
for (i = 2; i < (size_t)items && !ret; i++) { |
|
|
9 |
0 |
for (i = 2; i < (size_t)items && !ret; i++) { |
|
4094
|
0 |
9 |
if ((status = _validate_and_set(&d, aTHX_ ST(i), IFLAG_ABS)) != 1) |
|
4096
|
0 |
9 |
ret = d==0 ? (n==0) : n % d == 0; |
|
4098
|
450335 |
0 |
if (status == 1) RETURN_NPARITY(ret); |
|
|
450335 |
0 |
if (status == 1) RETURN_NPARITY(ret); |
|
|
450335 |
0 |
if (status == 1) RETURN_NPARITY(ret); |
|
4111
|
40048 |
6 |
if (nstatus != 0 && cstatus != 0 && dstatus != 0) { |
|
|
40048 |
0 |
if (nstatus != 0 && cstatus != 0 && dstatus != 0) { |
|
|
40048 |
0 |
if (nstatus != 0 && cstatus != 0 && dstatus != 0) { |
|
4112
|
40010 |
38 |
if (d != 0) { |
|
4116
|
40048 |
0 |
RETURN_NPARITY( n == c ); |
|
|
40048 |
0 |
RETURN_NPARITY( n == c ); |
|
4127
|
0 |
134 |
if (k <= 1) croak("valuation: k must be > 1"); |
|
4128
|
1 |
133 |
if (n == 0) XSRETURN_UNDEF; |
|
4129
|
133 |
0 |
RETURN_NPARITY(valuation(n, k)); |
|
|
133 |
0 |
RETURN_NPARITY(valuation(n, k)); |
|
4141
|
381 |
1292 |
UV n, ret, k = 2; |
|
4144
|
1667 |
6 |
if (nstatus != 0 && (!svk || _validate_and_set(&k, aTHX_ svk, IFLAG_POS))) { |
|
|
1288 |
379 |
if (nstatus != 0 && (!svk || _validate_and_set(&k, aTHX_ svk, IFLAG_POS))) { |
|
|
1288 |
0 |
if (nstatus != 0 && (!svk || _validate_and_set(&k, aTHX_ svk, IFLAG_POS))) { |
|
4145
|
55 |
1612 |
if (nstatus == -1) RETURN_NPARITY(0); |
|
|
55 |
0 |
if (nstatus == -1) RETURN_NPARITY(0); |
|
|
55 |
0 |
if (nstatus == -1) RETURN_NPARITY(0); |
|
4146
|
1233 |
379 |
if (ix == 0) RETURN_NPARITY( is_powerful(n, k) ); |
|
|
1233 |
0 |
if (ix == 0) RETURN_NPARITY( is_powerful(n, k) ); |
|
|
1233 |
0 |
if (ix == 0) RETURN_NPARITY( is_powerful(n, k) ); |
|
4147
|
193 |
186 |
if (ix == 1) XSRETURN_UV( powerful_count(n, k) ); |
|
4148
|
182 |
4 |
if (ix == 2) { |
|
4149
|
3 |
179 |
if (n == 0) XSRETURN_UV(0); |
|
4152
|
1 |
3 |
if (n == 0) XSRETURN_UNDEF; |
|
4156
|
178 |
4 |
if (ret > 0) XSRETURN_UV(ret); |
|
4170
|
478 |
6 |
if (astatus != 0 && bstatus != 0) { |
|
|
166 |
312 |
if (astatus != 0 && bstatus != 0) { |
|
4172
|
154 |
12 |
if (bstatus == 1) |
|
4173
|
146 |
8 |
k = (astatus==1) ? kronecker_uu(a,b) : kronecker_su((IV)a,b); |
|
4175
|
8 |
4 |
k = (astatus==1) ? kronecker_uu(a,neg_iv(b)) : -kronecker_su((IV)a,neg_iv(b)); |
|
4176
|
166 |
0 |
RETURN_NPARITY( k ); |
|
|
166 |
0 |
RETURN_NPARITY( k ); |
|
4188
|
101 |
2 |
if (astatus != 0 && nstatus != 0) { |
|
|
101 |
0 |
if (astatus != 0 && nstatus != 0) { |
|
4189
|
1 |
100 |
if (n == 0) XSRETURN_UNDEF; |
|
4190
|
6 |
94 |
if (n == 1) RETURN_NPARITY(1); |
|
|
6 |
0 |
if (n == 1) RETURN_NPARITY(1); |
|
|
6 |
0 |
if (n == 1) RETURN_NPARITY(1); |
|
4192
|
94 |
0 |
RETURN_NPARITY( is_qr(a,n) ); |
|
|
94 |
0 |
RETURN_NPARITY( is_qr(a,n) ); |
|
4210
|
100588 |
722066 |
bstatus = _validate_and_set(&b, aTHX_ svb, (ix == 7) ? IFLAG_POS : IFLAG_ANY); |
|
4212
|
786453 |
36201 |
if (astatus != 0 && bstatus != 0) { |
|
|
784845 |
1608 |
if (astatus != 0 && bstatus != 0) { |
|
4218
|
182840 |
602005 |
smask = ((astatus == -1) << 1) + (bstatus == -1); |
|
4221
|
1988 |
782857 |
if (b == 0 && (ix==3 || ix==4 || ix==5)) |
|
|
1986 |
2 |
if (b == 0 && (ix==3 || ix==4 || ix==5)) |
|
|
1984 |
2 |
if (b == 0 && (ix==3 || ix==4 || ix==5)) |
|
|
2 |
1982 |
if (b == 0 && (ix==3 || ix==4 || ix==5)) |
|
4224
|
273751 |
511088 |
if (smask != 0) { /* Manipulate so all arguments are positive */ |
|
4225
|
182840 |
90911 |
if (smask & 2) a = neg_iv(a); |
|
4226
|
181020 |
92731 |
if (smask & 1) b = neg_iv(b); |
|
4228
|
239 |
273512 |
if (ix == 0) { |
|
4235
|
804 |
272708 |
} else if (ix == 1) { |
|
4242
|
516 |
272192 |
} else if (ix == 2) { |
|
4243
|
500 |
16 |
switch (smask) { |
|
4248
|
1059 |
271133 |
} else if (ix == 3) { |
|
4249
|
1051 |
8 |
switch (smask) { |
|
4254
|
271093 |
40 |
} else if (ix == 4) { |
|
4261
|
9 |
31 |
} else if (ix == 5) { |
|
4262
|
7 |
2 |
switch (smask) { |
|
4267
|
31 |
0 |
} else if (ix == 6) { |
|
4269
|
31 |
0 |
} else if (ix == 7) { |
|
4279
|
178 |
656 |
if (b > a && (IV)ret < 0) XSRETURN_IV((IV)ret); |
|
|
173 |
5 |
if (b > a && (IV)ret < 0) XSRETURN_IV((IV)ret); |
|
4283
|
105134 |
17 |
overflow = a > 0 && UV_MAX/a < b; |
|
|
6505 |
98629 |
overflow = a > 0 && UV_MAX/a < b; |
|
4289
|
124772 |
56305 |
case 6: ret = (a%b) ? b-(a%b) : 0; /* cmodint */ |
|
4293
|
92237 |
7935 |
overflow = (a > 1 && ret == UV_MAX); |
|
|
5631 |
86606 |
overflow = (a > 1 && ret == UV_MAX); |
|
4296
|
772456 |
12210 |
if (!overflow) { |
|
4297
|
590417 |
182039 |
if (!postneg) |
|
4299
|
181987 |
52 |
if (ret <= (UV)IV_MAX) |
|
4315
|
454 |
1695 |
if (status == 1) { |
|
4316
|
92 |
362 |
if (ix == 1 && n == 0) XSRETURN_IV(-1); |
|
|
6 |
86 |
if (ix == 1 && n == 0) XSRETURN_IV(-1); |
|
4317
|
362 |
86 |
if (ix == 1 || (ix == 0 && n < UV_MAX)) |
|
|
362 |
0 |
if (ix == 1 || (ix == 0 && n < UV_MAX)) |
|
|
359 |
3 |
if (ix == 1 || (ix == 0 && n < UV_MAX)) |
|
4318
|
359 |
86 |
XSRETURN_UV( (ix==0) ? n+1 : n-1 ); |
|
4319
|
37 |
1658 |
} else if (status == -1) { |
|
4320
|
20 |
17 |
if (ix == 0 || (ix == 1 && (IV)n > IV_MIN)) |
|
|
20 |
0 |
if (ix == 0 || (ix == 1 && (IV)n > IV_MIN)) |
|
|
20 |
0 |
if (ix == 0 || (ix == 1 && (IV)n > IV_MIN)) |
|
4321
|
17 |
20 |
XSRETURN_IV( (ix==0) ? (IV)n+1 : (IV)n-1 ); |
|
4333
|
301 |
2120 |
if (ix == 0) { |
|
4334
|
270 |
31 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS)) |
|
4338
|
146 |
1974 |
if (status == -1) XSRETURN_UV(neg_iv(n)); |
|
4339
|
435 |
1539 |
else if (status == 1) XSRETURN_IV(neg_iv(n)); |
|
4356
|
1584 |
724 |
if (status == 0) { /* Look at the string input */ |
|
4358
|
1584 |
0 |
if (len == 0 || s == 0) croak("%s: invalid non-empty input", SUBNAME); |
|
|
0 |
1584 |
if (len == 0 || s == 0) croak("%s: invalid non-empty input", SUBNAME); |
|
4359
|
1569 |
15 |
sign = (s[0] == '-') ? -1 : (s[0] == '0') ? 0 : 1; |
|
4360
|
1521 |
63 |
isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9'); |
|
|
1475 |
46 |
isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9'); |
|
|
1436 |
39 |
isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9'); |
|
|
1359 |
77 |
isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9'); |
|
|
68 |
1291 |
isodd = (s[len-1] == '1' || s[len-1] == '3' || s[len-1] == '5' || s[len-1] == '7' || s[len-1] == '9'); |
|
4362
|
510 |
214 |
sign = (status == -1) ? -1 : (n == 0) ? 0 : 1; |
|
4365
|
2047 |
261 |
RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd ); |
|
|
1655 |
392 |
RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd ); |
|
|
2308 |
0 |
RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd ); |
|
|
2308 |
0 |
RETURN_NPARITY( (ix==0) ? sign : (ix==1) ? isodd : !isodd ); |
|
4374
|
146 |
144 |
if (astatus != 0 && bstatus != 0) { |
|
|
123 |
23 |
if (astatus != 0 && bstatus != 0) { |
|
4375
|
18 |
105 |
if (astatus > bstatus) ret = 1; |
|
4376
|
25 |
80 |
else if (astatus < bstatus) ret = -1; |
|
4377
|
18 |
62 |
else if (a == b) ret = 0; |
|
4378
|
57 |
5 |
else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1; |
|
|
31 |
26 |
else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1; |
|
|
5 |
31 |
else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1; |
|
|
2 |
3 |
else ret = ((astatus == 1 && a > b) || (astatus == -1 && (IV)a > (IV)b)) ? 1 : -1; |
|
4386
|
290 |
0 |
RETURN_NPARITY(ret); |
|
|
290 |
0 |
RETURN_NPARITY(ret); |
|
4394
|
1271 |
34022 |
if (ix == 0 && k <= 1) croak("logint: base must be > 1"); |
|
|
2 |
1269 |
if (ix == 0 && k <= 1) croak("logint: base must be > 1"); |
|
4395
|
34022 |
1269 |
if (ix == 1 && k <= 0) croak("rootint: k must be > 0"); |
|
|
1 |
34021 |
if (ix == 1 && k <= 0) croak("rootint: k must be > 0"); |
|
4396
|
4408 |
30882 |
if (svret != 0 && !SvROK(svret)) |
|
|
0 |
4408 |
if (svret != 0 && !SvROK(svret)) |
|
4398
|
1269 |
34021 |
if (_validate_and_set(&n, aTHX_ svn, ix == 0 ? IFLAG_POS | IFLAG_NONZERO : IFLAG_POS)) { |
|
|
31300 |
3987 |
if (_validate_and_set(&n, aTHX_ svn, ix == 0 ? IFLAG_POS | IFLAG_NONZERO : IFLAG_POS)) { |
|
4399
|
886 |
30414 |
root = (ix == 0) ? logint(n, k) : rootint(n, k); |
|
4400
|
1331 |
29969 |
if (svret) sv_setuv(SvRV(svret), ix == 0 ? ipow(k,root) : ipow(root,k)); |
|
|
1 |
1330 |
if (svret) sv_setuv(SvRV(svret), ix == 0 ? ipow(k,root) : ipow(root,k)); |
|
4419
|
770 |
215 |
if (astatus != 0 && bstatus != 0 && d == 0) |
|
|
770 |
0 |
if (astatus != 0 && bstatus != 0 && d == 0) |
|
|
8 |
762 |
if (astatus != 0 && bstatus != 0 && d == 0) |
|
4421
|
705 |
272 |
if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) { |
|
|
690 |
15 |
if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) { |
|
|
11 |
679 |
if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) { |
|
|
2 |
9 |
if (astatus == 1 && bstatus == 1 && (ix != 2 || D % d == 0)) { |
|
4422
|
0 |
681 |
XPUSHs(sv_2mortal(newSVuv( D / d ))); |
|
4423
|
0 |
681 |
XPUSHs(sv_2mortal(newSVuv( D % d ))); |
|
4425
|
35 |
261 |
} else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) { |
|
|
13 |
22 |
} else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) { |
|
|
9 |
4 |
} else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) { |
|
|
8 |
1 |
} else if (ix == 2 && astatus == 1 && bstatus == 1 && d <= (UV)IV_MAX) { |
|
4427
|
0 |
8 |
XPUSHs(sv_2mortal(newSVuv( D/d + 1 ))); |
|
4428
|
0 |
8 |
XPUSHs(sv_2mortal(newSViv( ((IV)D%d) - d ))); |
|
4430
|
73 |
215 |
} else if (astatus != 0 && bstatus != 0 && |
|
4431
|
72 |
1 |
_validate_and_set((UV*)&iD, aTHX_ sva, IFLAG_IV) != 0 && |
|
4442
|
0 |
72 |
XPUSHs(sv_2mortal(newSViv( q ))); |
|
4443
|
0 |
72 |
XPUSHs(sv_2mortal(newSViv( r ))); |
|
4447
|
432 |
0 |
OBJECTIFY_STACK(2); |
|
|
235 |
197 |
OBJECTIFY_STACK(2); |
|
|
0 |
235 |
OBJECTIFY_STACK(2); |
|
|
432 |
216 |
OBJECTIFY_STACK(2); |
|
|
0 |
216 |
OBJECTIFY_STACK(2); |
|
4459
|
2710 |
1755 |
if (items == 1) { |
|
4464
|
96 |
1659 |
if (kstatus == -1) { |
|
4469
|
4465 |
0 |
if (kstatus != 0) { |
|
4471
|
57 |
4408 |
if (k == 0) |
|
4473
|
1995 |
2413 |
if (nstatus != 0 && nix > 0 && k >= BITS_PER_WORD) /* Big right shift */ |
|
|
738 |
1257 |
if (nstatus != 0 && nix > 0 && k >= BITS_PER_WORD) /* Big right shift */ |
|
|
114 |
624 |
if (nstatus != 0 && nix > 0 && k >= BITS_PER_WORD) /* Big right shift */ |
|
4474
|
22 |
92 |
XSRETURN_IV(nstatus == -1 && nix==2 ? -1 : 0); |
|
|
13 |
9 |
XSRETURN_IV(nstatus == -1 && nix==2 ? -1 : 0); |
|
4475
|
1691 |
2603 |
if (nstatus == 1 && k < BITS_PER_WORD) { |
|
|
954 |
737 |
if (nstatus == 1 && k < BITS_PER_WORD) { |
|
4476
|
565 |
389 |
if (nix > 0) XSRETURN_UV(n >> k); /* Right shift */ |
|
4477
|
226 |
163 |
if ( ((n << k) >> k) == n) XSRETURN_UV(n << k); /* Left shift */ |
|
4479
|
190 |
3150 |
} else if (nstatus == -1 && nix > 0 && k < BITS_PER_WORD) { |
|
|
59 |
131 |
} else if (nstatus == -1 && nix > 0 && k < BITS_PER_WORD) { |
|
|
59 |
0 |
} else if (nstatus == -1 && nix > 0 && k < BITS_PER_WORD) { |
|
4482
|
41 |
18 |
XSRETURN_IV( nix == 1 ? -nk : (nk<
|
|
|
3 |
15 |
XSRETURN_IV( nix == 1 ? -nk : (nk<
|
|
4483
|
131 |
3150 |
} else if (nstatus == -1 && nix == 0 && k+1 < BITS_PER_WORD) { |
|
|
131 |
0 |
} else if (nstatus == -1 && nix == 0 && k+1 < BITS_PER_WORD) { |
|
|
130 |
1 |
} else if (nstatus == -1 && nix == 0 && k+1 < BITS_PER_WORD) { |
|
4486
|
125 |
5 |
if ((nk << 1) >> (k+1) == n) |
|
4503
|
0 |
12 |
XPUSHs(sv_2mortal(newSViv( u ))); |
|
4504
|
0 |
12 |
XPUSHs(sv_2mortal(newSViv( v ))); |
|
4505
|
0 |
12 |
XPUSHs(sv_2mortal(newSViv( d ))); |
|
4508
|
6 |
0 |
OBJECTIFY_STACK(3); |
|
|
4 |
2 |
OBJECTIFY_STACK(3); |
|
|
0 |
4 |
OBJECTIFY_STACK(3); |
|
|
6 |
2 |
OBJECTIFY_STACK(3); |
|
|
0 |
2 |
OBJECTIFY_STACK(3); |
|
4515
|
640 |
254 |
if (type != 1 && type != 2 && type != 3) |
|
|
253 |
387 |
if (type != 1 && type != 2 && type != 3) |
|
|
1 |
252 |
if (type != 1 && type != 2 && type != 3) |
|
4517
|
70 |
823 |
if (n == m) |
|
4519
|
820 |
3 |
else if (n == 0 || m == 0 || m > n) |
|
|
760 |
60 |
else if (n == 0 || m == 0 || m > n) |
|
|
60 |
700 |
else if (n == 0 || m == 0 || m > n) |
|
4521
|
190 |
510 |
else if (type == 3) { |
|
4523
|
185 |
5 |
if (s != 0) XSRETURN_UV(s); |
|
4524
|
318 |
192 |
} else if (type == 2) { |
|
4526
|
209 |
109 |
if (s != 0) XSRETURN_IV(s); |
|
4527
|
192 |
0 |
} else if (type == 1) { |
|
4529
|
145 |
47 |
if (s != 0) XSRETURN_IV(s); |
|
4545
|
108 |
0 |
nv = !SvROK(x) ? SvNV(x) : STRTONV(SvPV_nolen(x)); |
|
4554
|
102 |
6 |
RETVAL = ret; |
|
4567
|
28271 |
93 |
mask = (ix == 1 && items == 1) ? IFLAG_ABS : IFLAG_ANY; |
|
|
28241 |
30 |
mask = (ix == 1 && items == 1) ? IFLAG_ABS : IFLAG_ANY; |
|
4569
|
28316 |
48 |
if (svhi == 0 && lostatus != 0) { |
|
|
28297 |
19 |
if (svhi == 0 && lostatus != 0) { |
|
4570
|
74 |
28223 |
if (ix == 0) XSRETURN_UV( (lostatus == -1) ? 0 : totient(lo) ); |
|
|
73 |
1 |
if (ix == 0) XSRETURN_UV( (lostatus == -1) ? 0 : totient(lo) ); |
|
4571
|
28223 |
0 |
else RETURN_NPARITY( moebius(lo) ); |
|
|
28223 |
0 |
else RETURN_NPARITY( moebius(lo) ); |
|
4573
|
48 |
19 |
histatus = (svhi == 0) ? 0 : _validate_and_set(&hi, aTHX_ svhi, IFLAG_ANY); |
|
4580
|
45 |
22 |
if (lostatus == 1 && histatus == 1) { |
|
|
41 |
4 |
if (lostatus == 1 && histatus == 1) { |
|
4583
|
1 |
40 |
if (lo > hi) XSRETURN(0); |
|
4585
|
2 |
38 |
if (appendmax) hi--; |
|
4588
|
40 |
0 |
if (count > 0) { |
|
4589
|
40 |
0 |
EXTEND(SP, (EXTEND_TYPE)count); |
|
|
3 |
37 |
EXTEND(SP, (EXTEND_TYPE)count); |
|
4590
|
14 |
26 |
if (ix == 0) { |
|
4591
|
6 |
8 |
UV arrlo = (lo < 100) ? 0 : lo; |
|
4593
|
371 |
14 |
for (i = 0; i < count; i++) |
|
4599
|
27536 |
26 |
for (i = 0; i < count; i++) |
|
4600
|
27536 |
0 |
PUSH_NPARITY(mu[i]); |
|
|
27536 |
0 |
PUSH_NPARITY(mu[i]); |
|
4604
|
2 |
38 |
if (appendmax) { |
|
4605
|
0 |
2 |
EXTEND(SP, 1); |
|
4606
|
1 |
1 |
if (ix == 0) { |
|
4610
|
1 |
0 |
PUSH_NPARITY(-1); /* moebius of 2^32-1, 2^64-1, 2^128-1 => -1 */ |
|
|
1 |
0 |
PUSH_NPARITY(-1); /* moebius of 2^32-1, 2^64-1, 2^128-1 => -1 */ |
|
4625
|
65668 |
46 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
4647
|
37150 |
23 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_ABS)) { |
|
4656
|
37150 |
0 |
RETURN_NPARITY(ret); |
|
|
37150 |
0 |
RETURN_NPARITY(ret); |
|
4658
|
3 |
20 |
if (ix == 2 && _XS_get_callgmp() < 47) { |
|
|
3 |
0 |
if (ix == 2 && _XS_get_callgmp() < 47) { |
|
4675
|
1320 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
4686
|
1273 |
47 |
if (n == 0 || r > 0) XSRETURN_UV(r); |
|
|
855 |
418 |
if (n == 0 || r > 0) XSRETURN_UV(r); |
|
4687
|
0 |
418 |
if (ix == 5) { /* Probably an overflow, try 128-bit. */ |
|
4690
|
0 |
0 |
if (retok == 1 && hicount > 0) |
|
|
0 |
0 |
if (retok == 1 && hicount > 0) |
|
4692
|
0 |
0 |
if (retok == 1) |
|
4707
|
3568 |
10 |
if (nstatus != 0 && kstatus != 0) { |
|
|
3568 |
0 |
if (nstatus != 0 && kstatus != 0) { |
|
4708
|
3201 |
367 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
|
3074 |
127 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
|
3017 |
57 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
|
367 |
3017 |
if ( (nstatus == 1 && (kstatus == -1 || k > n)) || |
|
4709
|
138 |
229 |
(nstatus ==-1 && (kstatus == -1 && k > n)) ) |
|
|
57 |
81 |
(nstatus ==-1 && (kstatus == -1 && k > n)) ) |
|
4711
|
81 |
3246 |
if (kstatus == -1) |
|
4713
|
310 |
3017 |
if (nstatus == -1) { |
|
4715
|
245 |
65 |
if (ret > 0 && ret <= (UV)IV_MAX) |
|
|
245 |
0 |
if (ret > 0 && ret <= (UV)IV_MAX) |
|
4716
|
111 |
134 |
XSRETURN_IV( (IV)ret * ((k&1) ? -1 : 1) ); |
|
4717
|
3017 |
0 |
} else if (nstatus == 1) { |
|
4719
|
2900 |
117 |
if (ret != 0) XSRETURN_UV(ret); |
|
4722
|
117 |
75 |
DISPATCHPP_GMPONLYIF(nstatus == 1 && kstatus != 0); |
|
|
117 |
0 |
DISPATCHPP_GMPONLYIF(nstatus == 1 && kstatus != 0); |
|
4735
|
252 |
230 |
if (nstatus == 1 && kstatus == 1) { |
|
|
252 |
0 |
if (nstatus == 1 && kstatus == 1) { |
|
4736
|
126 |
126 |
UV ret = (ix==0) ? falling_factorial(n,k) : rising_factorial(n,k); |
|
4737
|
248 |
4 |
if (ret != UV_MAX) XSRETURN_UV(ret); |
|
4738
|
220 |
10 |
} else if (nstatus == -1 && kstatus == 1) { |
|
|
220 |
0 |
} else if (nstatus == -1 && kstatus == 1) { |
|
4740
|
110 |
110 |
IV ret = (ix==0) ? falling_factorial_s(in,k) : rising_factorial_s(in,k); |
|
4741
|
220 |
0 |
if (ret != IV_MAX) XSRETURN_IV(ret); |
|
4759
|
1374 |
84 |
status = _validate_and_set(&n, aTHX_ svn, (ix < 5) ? IFLAG_POS : IFLAG_ANY); |
|
4760
|
1 |
1457 |
if (status == -1) |
|
4762
|
1455 |
2 |
if (status == 1) { |
|
4772
|
5 |
5 |
if (r == 0 && n != 0) |
|
|
4 |
1 |
if (r == 0 && n != 0) |
|
4777
|
1451 |
4 |
if (status != 0) RETURN_NPARITY(r); |
|
|
1390 |
61 |
if (status != 0) RETURN_NPARITY(r); |
|
|
1317 |
73 |
if (status != 0) RETURN_NPARITY(r); |
|
4801
|
19 |
0 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
4802
|
10 |
9 |
NV r = (ix==0) ? chebyshev_theta(n) : chebyshev_psi(n); |
|
4831
|
24 |
7 |
if (svb == 0 || atype == IARR_TYPE_BAD) { |
|
|
0 |
24 |
if (svb == 0 || atype == IARR_TYPE_BAD) { |
|
4838
|
30 |
1 |
if (alen == 0 || blen == 0) { |
|
|
1 |
29 |
if (alen == 0 || blen == 0) { |
|
4839
|
2 |
0 |
if (rb != ra) Safefree(rb); |
|
4843
|
29 |
0 |
if (atype == IARR_TYPE_BAD || btype == IARR_TYPE_BAD) |
|
|
1 |
28 |
if (atype == IARR_TYPE_BAD || btype == IARR_TYPE_BAD) |
|
4847
|
11 |
18 |
if (stype == IARR_TYPE_BAD) { |
|
4848
|
11 |
0 |
if (rb != ra) Safefree(rb); |
|
4853
|
18 |
0 |
sign = IARR_TYPE_TO_STATUS(stype); |
|
|
3 |
15 |
sign = IARR_TYPE_TO_STATUS(stype); |
|
4856
|
125 |
18 |
for (i = 0; i < alen; i++) |
|
4857
|
2676 |
125 |
for (j = 0; j < blen; j++) |
|
4859
|
11 |
7 |
if (rb != ra) Safefree(rb); |
|
4861
|
0 |
18 |
RETURN_SET_REF(s); |
|
|
437 |
12 |
RETURN_SET_REF(s); |
|
|
449 |
18 |
RETURN_SET_REF(s); |
|
4873
|
23 |
3 |
if (svb == 0 || atype == IARR_TYPE_BAD) { |
|
|
0 |
23 |
if (svb == 0 || atype == IARR_TYPE_BAD) { |
|
4880
|
25 |
1 |
if (alen == 0 || blen == 0) { |
|
|
0 |
25 |
if (alen == 0 || blen == 0) { |
|
4881
|
1 |
0 |
if (rb != ra) Safefree(rb); |
|
4885
|
25 |
0 |
if (atype != IARR_TYPE_BAD && btype != IARR_TYPE_BAD) { |
|
|
25 |
0 |
if (atype != IARR_TYPE_BAD && btype != IARR_TYPE_BAD) { |
|
4894
|
0 |
25 |
SETSUBREF(subcv, block); |
|
4906
|
25 |
0 |
if (!CvISXSUB(subcv)) { |
|
4910
|
0 |
25 |
PUSH_MULTICALL(subcv); |
|
4911
|
70 |
20 |
for (i = 0; i < alen; i++) { |
|
4912
|
235 |
65 |
for (j = 0; j < blen; j++) { |
|
4913
|
20 |
215 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
|
6 |
14 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
|
0 |
6 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
|
0 |
229 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
4914
|
30 |
205 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
|
14 |
16 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
|
0 |
14 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
|
0 |
221 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
4915
|
0 |
235 |
SCOPED_MULTICALL; |
|
|
0 |
235 |
SCOPED_MULTICALL; |
|
4917
|
231 |
4 |
if (status != 0) iset_add(&s, ret, status); |
|
4918
|
231 |
4 |
if (status == 0 || iset_is_invalid(s)) break; |
|
|
230 |
1 |
if (status == 0 || iset_is_invalid(s)) break; |
|
4920
|
5 |
65 |
if (j < blen) break; |
|
4923
|
25 |
0 |
POP_MULTICALL; |
|
4928
|
0 |
0 |
for (i = 0; i < alen; i++) { |
|
4929
|
0 |
0 |
for (j = 0; j < blen; j++) { |
|
4931
|
0 |
0 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
|
0 |
0 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
|
0 |
0 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
|
0 |
0 |
FASTSETSVINT(asv, atype == IARR_TYPE_POS, ra[i]); |
|
4932
|
0 |
0 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
|
0 |
0 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
|
0 |
0 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
|
0 |
0 |
FASTSETSVINT(bsv, btype == IARR_TYPE_POS, rb[j]); |
|
4933
|
0 |
0 |
PUSHMARK(SP); |
|
4936
|
0 |
0 |
if (status != 0) iset_add(&s, ret, status); |
|
4937
|
0 |
0 |
if (status == 0 || iset_is_invalid(s)) break; |
|
|
0 |
0 |
if (status == 0 || iset_is_invalid(s)) break; |
|
4939
|
0 |
0 |
if (j < blen) break; |
|
4943
|
21 |
4 |
if (status != 0 && !iset_is_invalid(s)) { |
|
|
20 |
1 |
if (status != 0 && !iset_is_invalid(s)) { |
|
4944
|
17 |
3 |
if (rb != ra) Safefree(rb); |
|
4946
|
0 |
20 |
RETURN_SET_REF(s); |
|
|
80 |
76 |
RETURN_SET_REF(s); |
|
|
156 |
20 |
RETURN_SET_REF(s); |
|
4950
|
5 |
0 |
if (rb != ra) Safefree(rb); |
|
4973
|
14 |
42 |
SV **bb = aa ? _check_sorted_nonneg_arrayref(aTHX_ svb, &fb) : NULL; |
|
4974
|
14 |
42 |
if (aa && bb) { |
|
|
8 |
6 |
if (aa && bb) { |
|
4975
|
6 |
2 |
int inc_eq = (ix == 0 || ix == 1); /* union, intersect */ |
|
|
2 |
4 |
int inc_eq = (ix == 0 || ix == 1); /* union, intersect */ |
|
4977
|
6 |
2 |
int inc_gt = (ix == 0 || ix == 3); /* union, delta */ |
|
|
2 |
4 |
int inc_gt = (ix == 0 || ix == 3); /* union, delta */ |
|
4978
|
2 |
6 |
size_t maxlen = (ix == 1) ? (fa < fb ? fa : fb) : fa + fb; |
|
4983
|
24 |
8 |
while (ia < fa && ib < fb) { |
|
|
24 |
0 |
while (ia < fa && ib < fb) { |
|
4985
|
12 |
12 |
if (va==vb) {if (inc_eq) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++; ib++;} |
|
|
6 |
6 |
if (va==vb) {if (inc_eq) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++; ib++;} |
|
4986
|
12 |
0 |
else if (va< vb) {if (inc_lt) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++;} |
|
|
9 |
3 |
else if (va< vb) {if (inc_lt) ar[rlen++]=SvREFCNT_inc(aa[ia]); ia++;} |
|
4987
|
0 |
0 |
else {if (inc_gt) ar[rlen++]=SvREFCNT_inc(bb[ib]); ib++;} |
|
4989
|
6 |
2 |
if (inc_lt) while (ia < fa) ar[rlen++] = SvREFCNT_inc(aa[ia++]); |
|
|
0 |
6 |
if (inc_lt) while (ia < fa) ar[rlen++] = SvREFCNT_inc(aa[ia++]); |
|
4990
|
4 |
4 |
if (inc_gt) while (ib < fb) ar[rlen++] = SvREFCNT_inc(bb[ib++]); |
|
|
8 |
4 |
if (inc_gt) while (ib < fb) ar[rlen++] = SvREFCNT_inc(bb[ib++]); |
|
5000
|
30 |
18 |
if (CAN_COMBINE_IARR_TYPES(atype,btype)) { |
|
5003
|
22 |
8 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
|
21 |
1 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
5005
|
8 |
22 |
if (ix == 0) { /* union */ |
|
5006
|
0 |
8 |
New(0, r, alen + blen, UV); |
|
5007
|
33 |
7 |
while (ia < alen && ib < blen) { |
|
|
32 |
1 |
while (ia < alen && ib < blen) { |
|
5008
|
9 |
23 |
if (ra[ia] == rb[ib]) { |
|
5012
|
3 |
20 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++]; |
|
|
15 |
8 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++]; |
|
5016
|
1 |
7 |
if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; } |
|
|
0 |
1 |
if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; } |
|
5017
|
5 |
3 |
if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; } |
|
|
0 |
5 |
if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; } |
|
5018
|
7 |
15 |
} else if (ix == 1) { /* intersect */ |
|
5019
|
0 |
7 |
New(0, r, (alen < blen) ? alen : blen, UV); |
|
5020
|
28 |
6 |
while (ia < alen && ib < blen) { |
|
|
27 |
1 |
while (ia < alen && ib < blen) { |
|
5021
|
9 |
18 |
if (ra[ia] == rb[ib]) { |
|
5025
|
3 |
15 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++; |
|
|
12 |
6 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++; |
|
5029
|
7 |
8 |
} else if (ix == 2) { /* minus (difference) */ |
|
5030
|
0 |
7 |
New(0, r, alen, UV); |
|
5031
|
28 |
6 |
while (ia < alen && ib < blen) { |
|
|
27 |
1 |
while (ia < alen && ib < blen) { |
|
5032
|
9 |
18 |
if (ra[ia] == rb[ib]) { |
|
5035
|
3 |
15 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++]; |
|
|
12 |
6 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++]; |
|
5039
|
1 |
6 |
if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; } |
|
|
0 |
1 |
if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; } |
|
5040
|
8 |
0 |
} else if (ix == 3) { /* delta (symmetric difference) */ |
|
5041
|
0 |
8 |
New(0, r, alen + blen, UV); |
|
5042
|
32 |
7 |
while (ia < alen && ib < blen) { |
|
|
31 |
1 |
while (ia < alen && ib < blen) { |
|
5043
|
11 |
20 |
if (ra[ia] == rb[ib]) { |
|
5046
|
5 |
15 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++]; |
|
|
14 |
6 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) r[rlen++] = ra[ia++]; |
|
5050
|
1 |
7 |
if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; } |
|
|
0 |
1 |
if (ia < alen) { Copy(ra+ia, r+rlen, alen-ia, UV); rlen += alen-ia; } |
|
5051
|
5 |
3 |
if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; } |
|
|
0 |
5 |
if (ib < blen) { Copy(rb+ib, r+rlen, blen-ib, UV); rlen += blen-ib; } |
|
5055
|
40 |
65 |
RETURN_LIST_REF(rlen, r, pcmp); |
|
|
105 |
30 |
RETURN_LIST_REF(rlen, r, pcmp); |
|
5082
|
90 |
0 |
if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) { |
|
|
90 |
0 |
if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) { |
|
|
90 |
0 |
if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) { |
|
|
90 |
0 |
if (SvROK(sva) && SvTYPE(SvRV(sva)) == SVt_PVAV && SvROK(svb) && SvTYPE(SvRV(svb)) == SVt_PVAV) { |
|
5086
|
10 |
80 |
if ( (ix == 1 && inalen != inblen) || |
|
|
5 |
5 |
if ( (ix == 1 && inalen != inblen) || |
|
|
29 |
56 |
if ( (ix == 1 && inalen != inblen) || |
|
5087
|
28 |
1 |
(ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) || |
|
|
10 |
74 |
(ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) || |
|
|
4 |
6 |
(ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) || |
|
|
10 |
68 |
(ix == 2 && inalen < inblen) || (ix == 3 && inalen <= inblen) || |
|
5088
|
9 |
1 |
(ix == 4 && inalen > inblen) || (ix == 5 && inalen >= inblen) ) |
|
|
10 |
67 |
(ix == 4 && inalen > inblen) || (ix == 5 && inalen >= inblen) ) |
|
|
6 |
4 |
(ix == 4 && inalen > inblen) || (ix == 5 && inalen >= inblen) ) |
|
5089
|
19 |
0 |
RETURN_NPARITY(0); |
|
|
19 |
0 |
RETURN_NPARITY(0); |
|
5096
|
57 |
14 |
if (CAN_COMBINE_IARR_TYPES(atype,btype)) { |
|
5098
|
40 |
17 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
|
39 |
1 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
5100
|
304 |
34 |
while (ia < alen && ib < blen) { |
|
|
281 |
23 |
while (ia < alen && ib < blen) { |
|
5101
|
207 |
74 |
if (ra[ia] == rb[ib]) { |
|
5105
|
39 |
35 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++; |
|
|
44 |
30 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) ia++; |
|
5113
|
5 |
3 |
case 0: if (rlen == 0) ret = 1; break; |
|
5114
|
4 |
0 |
case 1: if (alen == blen && rlen == blen) ret = 1; break; |
|
|
2 |
2 |
case 1: if (alen == blen && rlen == blen) ret = 1; break; |
|
5115
|
23 |
0 |
case 2: if (alen >= blen && rlen == blen) ret = 1; break; |
|
|
16 |
7 |
case 2: if (alen >= blen && rlen == blen) ret = 1; break; |
|
5116
|
3 |
0 |
case 3: if (alen > blen && rlen == blen) ret = 1; break; |
|
|
2 |
1 |
case 3: if (alen > blen && rlen == blen) ret = 1; break; |
|
5117
|
7 |
0 |
case 4: if (alen <= blen && rlen == alen) ret = 1; break; |
|
|
4 |
3 |
case 4: if (alen <= blen && rlen == alen) ret = 1; break; |
|
5118
|
3 |
0 |
case 5: if (alen < blen && rlen == alen) ret = 1; break; |
|
|
2 |
1 |
case 5: if (alen < blen && rlen == alen) ret = 1; break; |
|
5120
|
4 |
5 |
default:if (rlen > 0 && rlen < alen && rlen < blen) ret = 1; break; |
|
|
3 |
1 |
default:if (rlen > 0 && rlen < alen && rlen < blen) ret = 1; break; |
|
|
2 |
1 |
default:if (rlen > 0 && rlen < alen && rlen < blen) ret = 1; break; |
|
5122
|
57 |
0 |
RETURN_NPARITY(ret); |
|
|
57 |
0 |
RETURN_NPARITY(ret); |
|
5140
|
52 |
0 |
CHECK_ARRAYREF(sva); /* First argument is a set as array ref */ |
|
|
0 |
52 |
CHECK_ARRAYREF(sva); /* First argument is a set as array ref */ |
|
5143
|
0 |
52 |
if (items < 2) RETURN_NPARITY(1); |
|
|
0 |
0 |
if (items < 2) RETURN_NPARITY(1); |
|
|
0 |
0 |
if (items < 2) RETURN_NPARITY(1); |
|
5144
|
52 |
0 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
|
0 |
52 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
5149
|
51 |
1 |
if (items == 2 && SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
|
38 |
13 |
if (items == 2 && SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
|
33 |
5 |
if (items == 2 && SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
5151
|
33 |
0 |
USE_ARREF(arb, ST(1), SUBNAME, AR_READ); |
|
|
0 |
33 |
USE_ARREF(arb, ST(1), SUBNAME, AR_READ); |
|
|
0 |
33 |
USE_ARREF(arb, ST(1), SUBNAME, AR_READ); |
|
5153
|
7 |
26 |
if (ix == 1 && len_arb > alen && svarr_arb != 0) { |
|
|
1 |
6 |
if (ix == 1 && len_arb > alen && svarr_arb != 0) { |
|
|
1 |
0 |
if (ix == 1 && len_arb > alen && svarr_arb != 0) { |
|
5156
|
1 |
0 |
USE_ARREF(arb, ST(0), SUBNAME, AR_READ); |
|
|
0 |
1 |
USE_ARREF(arb, ST(0), SUBNAME, AR_READ); |
|
|
0 |
1 |
USE_ARREF(arb, ST(0), SUBNAME, AR_READ); |
|
5159
|
26 |
7 |
subset = ix == 0 && blen > alen ? 0 : findall; |
|
|
24 |
2 |
subset = ix == 0 && blen > alen ? 0 : findall; |
|
5163
|
64 |
24 |
for (i = 0; i < blen && subset == findall; i++) { |
|
|
55 |
9 |
for (i = 0; i < blen && subset == findall; i++) { |
|
5170
|
14 |
5 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
|
5 |
9 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
5171
|
14 |
5 |
subset = bstatus == 0 ? -1 : ix == 0 && blen > alen ? 0 : findall; |
|
|
12 |
2 |
subset = bstatus == 0 ? -1 : ix == 0 && blen > alen ? 0 : findall; |
|
|
12 |
0 |
subset = bstatus == 0 ? -1 : ix == 0 && blen > alen ? 0 : findall; |
|
5172
|
19 |
0 |
if (blen <= 4) { |
|
5173
|
22 |
14 |
for (i = 0; i < blen && subset == findall; i++) |
|
|
17 |
5 |
for (i = 0; i < blen && subset == findall; i++) |
|
5178
|
0 |
0 |
for (i = 0; i < blen && subset == findall; i++) |
|
|
0 |
0 |
for (i = 0; i < blen && subset == findall; i++) |
|
5183
|
40 |
12 |
if (subset != -1) |
|
5184
|
40 |
0 |
RETURN_NPARITY(subset); |
|
|
40 |
0 |
RETURN_NPARITY(subset); |
|
5196
|
40 |
0 |
CHECK_ARRAYREF(sva); /* First argument is a set as array ref */ |
|
|
0 |
40 |
CHECK_ARRAYREF(sva); /* First argument is a set as array ref */ |
|
5199
|
2 |
38 |
if (items < 2) |
|
5200
|
2 |
0 |
RETURN_NPARITY(0); |
|
|
2 |
0 |
RETURN_NPARITY(0); |
|
5201
|
0 |
38 |
CHECK_AV_NOT_READONLY(ava); /* We intend to modify it */ |
|
5202
|
38 |
0 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
|
0 |
38 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
5207
|
13 |
25 |
if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
|
13 |
0 |
if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
5208
|
0 |
13 |
if (items != 2) |
|
5214
|
37 |
1 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
|
6 |
31 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
5216
|
37 |
1 |
if (bstatus != 0 && blen <= 4) { |
|
|
34 |
3 |
if (bstatus != 0 && blen <= 4) { |
|
5219
|
78 |
0 |
for (i = 0; res >= 0 && i < blen; i++) { |
|
|
44 |
34 |
for (i = 0; res >= 0 && i < blen; i++) { |
|
5223
|
34 |
0 |
if (res >= 0) { Safefree(rb); RETURN_NPARITY(nins); } |
|
|
34 |
0 |
if (res >= 0) { Safefree(rb); RETURN_NPARITY(nins); } |
|
|
34 |
0 |
if (res >= 0) { Safefree(rb); RETURN_NPARITY(nins); } |
|
5224
|
3 |
1 |
} else if (bstatus != 0) { |
|
5231
|
0 |
3 |
if (alen == 0) { |
|
5233
|
0 |
0 |
for (i = 0; i < blen; i++) |
|
5234
|
0 |
0 |
av_push(ava, NEWSVINT(bstatus, rb[i])); |
|
5236
|
0 |
0 |
RETURN_NPARITY(blen); |
|
|
0 |
0 |
RETURN_NPARITY(blen); |
|
5240
|
3 |
0 |
if (_sc_set_lohi(aTHX_ AvARRAY(ava), &svcache, 0, alen-1, &alostatus, &ahistatus, &alo, &ahi) >= 0) { |
|
5241
|
0 |
3 |
if (_sign_cmp(alostatus,alo,ahistatus,ahi) > 0) |
|
5246
|
10 |
0 |
while (nbeg < blen && _sign_cmp(bstatus,rb[nbeg],alostatus,alo) < 0) |
|
|
7 |
3 |
while (nbeg < blen && _sign_cmp(bstatus,rb[nbeg],alostatus,alo) < 0) |
|
5249
|
508 |
1 |
while (nend < blen-nbeg && _sign_cmp(bstatus,rb[blen-1-nend],ahistatus,ahi) > 0) |
|
|
506 |
2 |
while (nend < blen-nbeg && _sign_cmp(bstatus,rb[blen-1-nend],ahistatus,ahi) > 0) |
|
5253
|
2 |
1 |
if (nmidcheck > 0) { |
|
5256
|
0 |
2 |
New(0, insert_idx, nmidcheck, size_t); |
|
5257
|
0 |
2 |
New(0, insert_sv, nmidcheck, SV*); |
|
5258
|
17 |
0 |
for (i = nbeg; bstatus != 0 && i < blen-nend; i++) { |
|
|
15 |
2 |
for (i = nbeg; bstatus != 0 && i < blen-nend; i++) { |
|
5260
|
0 |
15 |
if (index < 0) |
|
5262
|
4 |
11 |
if (index > 0) { |
|
5263
|
0 |
4 |
insert_sv[nmid] = NEWSVINT(bstatus,rb[i]);/* Value to insert */ |
|
5269
|
1 |
1 |
if (nmid > 0) { |
|
5275
|
4 |
1 |
for (i = 0; i < nmid; i++) |
|
5279
|
4 |
1 |
for (i = 0; i < nmid; i++) { |
|
5283
|
2 |
2 |
if (nmove > 0) { |
|
5296
|
2 |
1 |
if (nbeg > 0) { |
|
5298
|
7 |
2 |
for (i = 0; i < nbeg; i++) |
|
5299
|
6 |
1 |
av_store(ava, i, NEWSVINT(bstatus, rb[i])); |
|
5302
|
3 |
0 |
if (nend > 0) { |
|
5303
|
506 |
3 |
for (i = 0; i < nend; i++) |
|
5304
|
505 |
1 |
av_push(ava, NEWSVINT(bstatus, rb[blen-nend+i])); |
|
5307
|
3 |
0 |
RETURN_NPARITY(nbeg+nmid+nend); |
|
|
2 |
1 |
RETURN_NPARITY(nbeg+nmid+nend); |
|
5322
|
12 |
0 |
CHECK_ARRAYREF(sva); /* First argument is a set as array ref */ |
|
|
0 |
12 |
CHECK_ARRAYREF(sva); /* First argument is a set as array ref */ |
|
5325
|
10 |
2 |
if (alen == 0 || items < 2) |
|
|
0 |
10 |
if (alen == 0 || items < 2) |
|
5326
|
2 |
0 |
RETURN_NPARITY(0); |
|
|
2 |
0 |
RETURN_NPARITY(0); |
|
5327
|
0 |
10 |
CHECK_AV_NOT_READONLY(ava); /* We intend to modify it */ |
|
5328
|
10 |
0 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
|
0 |
10 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
5332
|
7 |
3 |
if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
|
7 |
0 |
if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
5333
|
0 |
7 |
if (items != 2) |
|
5339
|
10 |
0 |
if (btype != IARR_TYPE_BAD) { |
|
5340
|
10 |
0 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
|
1 |
9 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
5341
|
0 |
10 |
if (blen <= 5 || alen <= 20) { /* SIMPLE DELETE LOOP */ |
|
|
0 |
0 |
if (blen <= 5 || alen <= 20) { /* SIMPLE DELETE LOOP */ |
|
5344
|
25 |
0 |
for (i = 0; res >= 0 && i < blen; i++) { |
|
|
15 |
10 |
for (i = 0; res >= 0 && i < blen; i++) { |
|
5346
|
12 |
3 |
if (res > 0) ndel++; |
|
5348
|
10 |
0 |
if (res >= 0) { Safefree(rb); RETURN_NPARITY(ndel); } |
|
|
10 |
0 |
if (res >= 0) { Safefree(rb); RETURN_NPARITY(ndel); } |
|
|
10 |
0 |
if (res >= 0) { Safefree(rb); RETURN_NPARITY(ndel); } |
|
5349
|
0 |
0 |
} else if (blen < 500 || (blen*100) < alen) { /* ONE PASS DELETE */ |
|
|
0 |
0 |
} else if (blen < 500 || (blen*100) < alen) { /* ONE PASS DELETE */ |
|
5354
|
0 |
0 |
New(0, del_idx, blen, Size_t); |
|
5355
|
0 |
0 |
for (i = 0; i < blen; i++) { |
|
5357
|
0 |
0 |
if (index < 0) |
|
5359
|
0 |
0 |
if (index > 0) |
|
5363
|
0 |
0 |
if (ndel > 0) { |
|
5366
|
0 |
0 |
for (i = 0; i < ndel; i++) { |
|
5369
|
0 |
0 |
size_t len = (i+1) >= ndel ? alen-beg : del_idx[i+1]-beg; |
|
5371
|
0 |
0 |
if (len > 0) { |
|
5376
|
0 |
0 |
Zero(arr + alen - ndel, ndel, SV*); |
|
5380
|
0 |
0 |
RETURN_NPARITY(ndel); |
|
|
0 |
0 |
RETURN_NPARITY(ndel); |
|
5385
|
0 |
0 |
if (CAN_COMBINE_IARR_TYPES(atype,btype)) { |
|
5387
|
0 |
0 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
|
0 |
0 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
5389
|
0 |
0 |
astatus = IARR_TYPE_TO_STATUS(atype); |
|
|
0 |
0 |
astatus = IARR_TYPE_TO_STATUS(atype); |
|
5391
|
0 |
0 |
while (ia < alen && ib < blen) { |
|
|
0 |
0 |
while (ia < alen && ib < blen) { |
|
5392
|
0 |
0 |
if (ra[ia] == rb[ib]) { |
|
5395
|
0 |
0 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
|
0 |
0 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
|
0 |
0 |
if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
5399
|
0 |
0 |
while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
|
0 |
0 |
while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
5404
|
0 |
0 |
if (del_complete) RETURN_NPARITY(alen - av_count(ava)); |
|
|
0 |
0 |
if (del_complete) RETURN_NPARITY(alen - av_count(ava)); |
|
|
0 |
0 |
if (del_complete) RETURN_NPARITY(alen - av_count(ava)); |
|
5419
|
12 |
0 |
CHECK_ARRAYREF(sva); |
|
|
0 |
12 |
CHECK_ARRAYREF(sva); |
|
5422
|
2 |
10 |
if (items < 2) |
|
5423
|
2 |
0 |
RETURN_NPARITY(0); |
|
|
2 |
0 |
RETURN_NPARITY(0); |
|
5424
|
0 |
10 |
CHECK_AV_NOT_READONLY(ava); |
|
5425
|
10 |
0 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { |
|
|
0 |
10 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { |
|
5429
|
5 |
5 |
if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
|
5 |
0 |
if (SvROK(ST(1)) && SvTYPE(SvRV(ST(1))) == SVt_PVAV) { |
|
5430
|
0 |
5 |
if (items != 2) |
|
5436
|
10 |
0 |
if (btype != IARR_TYPE_BAD) { |
|
5437
|
2 |
8 |
if (blen == 0) { |
|
5439
|
2 |
0 |
RETURN_NPARITY(0); |
|
|
2 |
0 |
RETURN_NPARITY(0); |
|
5441
|
8 |
0 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
|
1 |
7 |
bstatus = IARR_TYPE_TO_STATUS(btype); |
|
5442
|
0 |
8 |
if (blen <= 4 || alen <= 20) { /* SIMPLE TOGGLE LOOP */ |
|
|
0 |
0 |
if (blen <= 4 || alen <= 20) { /* SIMPLE TOGGLE LOOP */ |
|
5445
|
26 |
0 |
for (i = 0; res >= 0 && i < blen; i++) { |
|
|
18 |
8 |
for (i = 0; res >= 0 && i < blen; i++) { |
|
5447
|
13 |
5 |
if (res > 0) { ndelta--; } /* found and removed */ |
|
5448
|
5 |
0 |
else if (res == 0) { /* not found, insert */ |
|
5450
|
5 |
0 |
if (res > 0) ndelta++; |
|
5453
|
8 |
0 |
if (res >= 0) { |
|
5463
|
0 |
0 |
if (CAN_COMBINE_IARR_TYPES(atype, btype)) { |
|
5465
|
0 |
0 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
|
0 |
0 |
int pcmp = (atype == IARR_TYPE_NEG || btype == IARR_TYPE_NEG) ? 0 : 1; |
|
5466
|
0 |
0 |
astatus = IARR_TYPE_TO_STATUS(atype); |
|
|
0 |
0 |
astatus = IARR_TYPE_TO_STATUS(atype); |
|
5468
|
0 |
0 |
while (ia < alen && ib < blen) { |
|
|
0 |
0 |
while (ia < alen && ib < blen) { |
|
5469
|
0 |
0 |
if (ra[ia] == rb[ib]) { ia++; ib++; } |
|
5470
|
0 |
0 |
else if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
|
0 |
0 |
else if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
|
0 |
0 |
else if (SIGNED_CMP_LT(pcmp, ra[ia], rb[ib])) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
5471
|
0 |
0 |
else av_push(ava, NEWSVINT(bstatus, rb[ib++])); |
|
5473
|
0 |
0 |
while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
|
0 |
0 |
while (ia < alen) av_push(ava, NEWSVINT(astatus, ra[ia++])); |
|
5474
|
0 |
0 |
while (ib < blen) av_push(ava, NEWSVINT(bstatus, rb[ib++])); |
|
|
0 |
0 |
while (ib < blen) av_push(ava, NEWSVINT(bstatus, rb[ib++])); |
|
5478
|
0 |
0 |
if (done) { |
|
5499
|
3 |
16 |
if (itype == IARR_TYPE_NEG) { /* All elements must be non-negative. */ |
|
5501
|
3 |
0 |
RETURN_NPARITY(0); |
|
|
3 |
0 |
RETURN_NPARITY(0); |
|
5504
|
16 |
0 |
if (itype == IARR_TYPE_BAD || itype == IARR_TYPE_POS) { |
|
|
1 |
15 |
if (itype == IARR_TYPE_BAD || itype == IARR_TYPE_POS) { |
|
5512
|
117 |
11 |
for (i = 0; i < len && is_sidon; i++) |
|
|
113 |
4 |
for (i = 0; i < len && is_sidon; i++) |
|
5513
|
2288 |
109 |
for (j = i; j < len; j++) |
|
5514
|
4 |
2284 |
if (!iset_add(&s, data[i] + data[j], 1)) |
|
5518
|
15 |
0 |
RETURN_NPARITY(is_sidon); |
|
|
15 |
0 |
RETURN_NPARITY(is_sidon); |
|
5529
|
35 |
0 |
if (itype != IARR_TYPE_BAD && len <= 1) { /* Degenerate cases: len 0 or 1 */ |
|
|
5 |
30 |
if (itype != IARR_TYPE_BAD && len <= 1) { /* Degenerate cases: len 0 or 1 */ |
|
5530
|
4 |
1 |
is_sumfree = len == 0 || data[0] != 0; |
|
|
3 |
1 |
is_sumfree = len == 0 || data[0] != 0; |
|
5532
|
5 |
0 |
RETURN_NPARITY(is_sumfree); |
|
|
5 |
0 |
RETURN_NPARITY(is_sumfree); |
|
5535
|
9 |
21 |
if (itype == IARR_TYPE_NEG) { |
|
5537
|
8 |
1 |
if (min < IV_MIN/2 || max > IV_MAX/2) itype = IARR_TYPE_BAD; |
|
|
0 |
8 |
if (min < IV_MIN/2 || max > IV_MAX/2) itype = IARR_TYPE_BAD; |
|
5540
|
20 |
10 |
if (itype == IARR_TYPE_ANY) { |
|
5541
|
60 |
11 |
for (i = 0; i < len && is_sumfree; i++) |
|
|
51 |
9 |
for (i = 0; i < len && is_sumfree; i++) |
|
5542
|
126 |
42 |
for (j = i; j < len; j++) |
|
5543
|
9 |
117 |
if (is_in_sorted_uv_array(data[i]+data[j], data, len)) |
|
5545
|
8 |
2 |
} else if (itype == IARR_TYPE_NEG) { |
|
5546
|
19 |
5 |
for (i = 0; i < len && is_sumfree; i++) |
|
|
16 |
3 |
for (i = 0; i < len && is_sumfree; i++) |
|
5547
|
35 |
13 |
for (j = i; j < len; j++) |
|
5548
|
3 |
32 |
if (is_in_sorted_iv_array((IV)data[i]+(IV)data[j], (IV*)data, len)) |
|
5553
|
10 |
20 |
if (itype == IARR_TYPE_ANY || itype == IARR_TYPE_NEG) |
|
|
8 |
2 |
if (itype == IARR_TYPE_ANY || itype == IARR_TYPE_NEG) |
|
5554
|
28 |
0 |
RETURN_NPARITY(is_sumfree); |
|
|
28 |
0 |
RETURN_NPARITY(is_sumfree); |
|
5572
|
4 |
73 |
if (items == 0) RETURN_EMPTY_SET_REF(); |
|
5574
|
41 |
32 |
if (type != IARR_TYPE_BAD) |
|
5575
|
194 |
64 |
RETURN_LIST_REF(len, L, type != IARR_TYPE_NEG); |
|
|
258 |
41 |
RETURN_LIST_REF(len, L, type != IARR_TYPE_NEG); |
|
5588
|
1 |
86 |
if (items == 0) |
|
5590
|
14 |
72 |
if (SvROK(ST(0)) && SvTYPE(SvRV(ST(0))) == SVt_PVAV) { |
|
|
9 |
5 |
if (SvROK(ST(0)) && SvTYPE(SvRV(ST(0))) == SVt_PVAV) { |
|
5591
|
0 |
9 |
if (items != 1) |
|
5597
|
3 |
83 |
if (GIMME_V != G_ARRAY) /* In scalar context, return number of elements */ |
|
5599
|
26 |
57 |
if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) { |
|
|
5 |
21 |
if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) { |
|
5601
|
1 |
20 |
} else if (type == IARR_TYPE_NEG) { |
|
5608
|
0 |
63 |
RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) ); |
|
|
63 |
0 |
RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) ); |
|
|
0 |
63 |
RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) ); |
|
|
341 |
47 |
RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) ); |
|
|
388 |
63 |
RETURN_LIST_VALS( len, L, (type != IARR_TYPE_NEG) ); |
|
5619
|
32 |
0 |
CHECK_ARRAYREF(sva); |
|
|
0 |
32 |
CHECK_ARRAYREF(sva); |
|
5621
|
0 |
32 |
CHECK_AV_NOT_READONLY(ava); /* We intend to modify it */ |
|
5622
|
32 |
0 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
|
0 |
32 |
if (SvMAGICAL(ava) || !AvREAL(ava)) { /* Punt these to Perl */ |
|
5632
|
27 |
5 |
if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) { |
|
|
2 |
25 |
if (type == IARR_TYPE_ANY || type == IARR_TYPE_POS) { |
|
5634
|
0 |
25 |
} else if (type == IARR_TYPE_NEG) { |
|
5642
|
18 |
7 |
for (i = 0; i < len; i++) |
|
5643
|
11 |
7 |
FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]); |
|
|
5 |
6 |
FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]); |
|
|
5 |
0 |
FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]); |
|
|
8 |
5 |
FASTSETSVINT(arr[i], type == IARR_TYPE_POS, L[i]); |
|
5653
|
1 |
5 |
if (n == 0) |
|
5655
|
5 |
0 |
if (n < 32 && _validate_and_set(&k, aTHX_ svk, IFLAG_ABS) == 1) { |
|
|
5 |
0 |
if (n < 32 && _validate_and_set(&k, aTHX_ svk, IFLAG_ABS) == 1) { |
|
5656
|
5 |
0 |
if (num_to_perm(k, n, S)) { |
|
5658
|
5 |
0 |
EXTEND(SP, (EXTEND_TYPE)n); |
|
|
0 |
5 |
EXTEND(SP, (EXTEND_TYPE)n); |
|
5659
|
45 |
5 |
for (i = 0; i < (int)n; i++) |
|
5660
|
45 |
0 |
PUSH_NPARITY( S[i] ); |
|
|
45 |
0 |
PUSH_NPARITY( S[i] ); |
|
5673
|
6 |
0 |
USE_ARREF(avp, svp, SUBNAME, AR_READ); |
|
|
0 |
6 |
USE_ARREF(avp, svp, SUBNAME, AR_READ); |
|
|
0 |
6 |
USE_ARREF(avp, svp, SUBNAME, AR_READ); |
|
5675
|
5 |
1 |
if (plen <= 20) { |
|
5677
|
42 |
5 |
for (i = 0; i < plen; i++) { |
|
5679
|
0 |
42 |
if (_validate_and_set(&val, aTHX_ iv, IFLAG_POS) != 1) |
|
5681
|
42 |
0 |
if (val >= plen || A[val] != 0) break; |
|
|
42 |
0 |
if (val >= plen || A[val] != 0) break; |
|
5685
|
5 |
0 |
if (i >= plen && perm_to_num(plen, V, &num)) |
|
|
4 |
1 |
if (i >= plen && perm_to_num(plen, V, &num)) |
|
5697
|
13 |
62 |
if (items == 1) k = n; |
|
5698
|
7 |
68 |
if (k > n) k = n; |
|
5699
|
2 |
73 |
if (k == 0) XSRETURN_EMPTY; |
|
5700
|
0 |
73 |
New(0, S, k, UV); |
|
5702
|
73 |
0 |
EXTEND(SP, (EXTEND_TYPE)k); |
|
|
0 |
73 |
EXTEND(SP, (EXTEND_TYPE)k); |
|
5703
|
589 |
73 |
for (i = 0; i < k; i++) { |
|
5704
|
483 |
106 |
if (n < 2*CINTS) PUSH_NPARITY(S[i]); |
|
|
483 |
0 |
if (n < 2*CINTS) PUSH_NPARITY(S[i]); |
|
|
455 |
28 |
if (n < 2*CINTS) PUSH_NPARITY(S[i]); |
|
5716
|
1 |
30 |
if (items == 0) |
|
5718
|
683 |
30 |
for (i = 0, randcxt = MY_CXT.randcxt; i < items-1; i++) { |
|
5732
|
6 |
22 |
if (items == 1) |
|
5750
|
18 |
4 |
if (items > 2 || !SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV) { |
|
|
15 |
3 |
if (items > 2 || !SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV) { |
|
|
0 |
15 |
if (items > 2 || !SvROK(ST(1)) || SvTYPE(SvRV(ST(1))) != SVt_PVAV) { |
|
5753
|
7 |
0 |
if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems) |
|
|
0 |
7 |
if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems) |
|
5756
|
10012 |
7 |
for (i = 0; i < k; i++) { |
|
5762
|
15 |
0 |
USE_ARREF(avp, ST(1), SUBNAME, AR_READ); |
|
|
0 |
15 |
USE_ARREF(avp, ST(1), SUBNAME, AR_READ); |
|
|
0 |
15 |
USE_ARREF(avp, ST(1), SUBNAME, AR_READ); |
|
5765
|
15 |
0 |
if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems) |
|
|
3 |
12 |
if (_validate_and_set(&k, aTHX_ svk, IFLAG_POS) == 0 || k > nitems) |
|
5767
|
3 |
12 |
if (k == 0) |
|
5769
|
12 |
0 |
if (nitems < 65536) { |
|
5771
|
0 |
12 |
New(0, I, nitems, uint16_t); |
|
5772
|
73 |
12 |
I[0] = nitems-1; for (i = 1; i < nitems; i++) I[i] = i-1; |
|
5773
|
12 |
0 |
EXTEND(SP, (EXTEND_TYPE)k); |
|
|
0 |
12 |
EXTEND(SP, (EXTEND_TYPE)k); |
|
5774
|
30 |
12 |
for (i = 0; i < k; i++) { |
|
5782
|
0 |
0 |
New(0, I, nitems, size_t); |
|
5783
|
0 |
0 |
I[0] = nitems-1; for (i = 1; i < nitems; i++) I[i] = i-1; |
|
5784
|
0 |
0 |
EXTEND(SP, (EXTEND_TYPE)k); |
|
|
0 |
0 |
EXTEND(SP, (EXTEND_TYPE)k); |
|
5785
|
0 |
0 |
for (i = 0; i < k; i++) { |
|
5800
|
4974 |
0 |
if (base < 2 || base > 36) croak("is_happy: invalid base %"UVuf, base); |
|
|
0 |
4974 |
if (base < 2 || base > 36) croak("is_happy: invalid base %"UVuf, base); |
|
5801
|
0 |
4974 |
if (k > 10) croak("is_happy: invalid exponent %"UVuf, k); |
|
5803
|
14 |
4960 |
if (status == 0 && base == 10) { /* String op to reduce into range. */ |
|
|
14 |
0 |
if (status == 0 && base == 10) { /* String op to reduce into range. */ |
|
5806
|
14 |
0 |
if (len <= UV_MAX/ipow(9,k)) { |
|
5807
|
1302 |
14 |
for (sum = 0, i = 0; i < len; i++) |
|
5810
|
14 |
0 |
RETURN_NPARITY( (h>0) ? h+1 : 0); |
|
|
14 |
0 |
RETURN_NPARITY( (h>0) ? h+1 : 0); |
|
|
14 |
0 |
RETURN_NPARITY( (h>0) ? h+1 : 0); |
|
5813
|
4960 |
0 |
if (status != 0) |
|
5814
|
4960 |
0 |
RETURN_NPARITY(happy_height(n, base, k)); |
|
|
4960 |
0 |
RETURN_NPARITY(happy_height(n, base, k)); |
|
5825
|
0 |
1007 |
base = (ibase == 255) ? 10 : ibase; |
|
5826
|
1007 |
0 |
if (base < 2 || base > 36) croak("sumdigits: invalid base %"UVuf, base); |
|
|
0 |
1007 |
if (base < 2 || base > 36) croak("sumdigits: invalid base %"UVuf, base); |
|
5829
|
1007 |
0 |
if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) { |
|
|
1002 |
5 |
if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) { |
|
|
1002 |
0 |
if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) { |
|
|
1001 |
1 |
if (base == 10 && SVNUMTEST(svn) && (SvIsUV(svn) || SvIVX(svn) >= 0)) { |
|
5831
|
2893 |
1001 |
while ((n=t)) { |
|
5839
|
6 |
0 |
if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){ |
|
|
6 |
0 |
if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){ |
|
|
1 |
5 |
if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){ |
|
|
0 |
1 |
if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){ |
|
|
0 |
0 |
if (ibase == 255 && len > 2 && s[0] == '0' && (s[1] == 'x' || s[1] == 'b')){ |
|
5840
|
1 |
0 |
base = (s[1] == 'x') ? 16 : 2; |
|
5844
|
38290 |
6 |
for (i = 0; i < len; i++) { |
|
5847
|
38287 |
3 |
if (c >= '0' && c <= '9') { d = c - '0'; } |
|
|
38285 |
2 |
if (c >= '0' && c <= '9') { d = c - '0'; } |
|
5848
|
1 |
4 |
else if (c >= 'a' && c <= 'z') { d = c - 'a' + 10; } |
|
|
1 |
0 |
else if (c >= 'a' && c <= 'z') { d = c - 'a' + 10; } |
|
5849
|
1 |
3 |
else if (c >= 'A' && c <= 'Z') { d = c - 'A' + 10; } |
|
|
1 |
0 |
else if (c >= 'A' && c <= 'Z') { d = c - 'A' + 10; } |
|
5850
|
38290 |
0 |
if (d < base) |
|
5864
|
0 |
293 |
if (base < 2) croak("%s: invalid base: %d", SUBNAME, base); |
|
5866
|
45 |
248 |
if (ix == 0 || ix == 1) { |
|
|
14 |
31 |
if (ix == 0 || ix == 1) { |
|
5870
|
248 |
45 |
if (ix == 0 && status != 0 && length < 128) { |
|
|
158 |
90 |
if (ix == 0 && status != 0 && length < 128) { |
|
|
158 |
0 |
if (ix == 0 && status != 0 && length < 128) { |
|
5873
|
158 |
0 |
if (len >= 0) { |
|
5875
|
158 |
0 |
EXTEND(SP, (EXTEND_TYPE)len); |
|
|
0 |
158 |
EXTEND(SP, (EXTEND_TYPE)len); |
|
5876
|
3743 |
158 |
for (i = 0; i < len; i++) |
|
5877
|
3743 |
0 |
PUSH_NPARITY( digits[len-i-1] ); |
|
|
3743 |
0 |
PUSH_NPARITY( digits[len-i-1] ); |
|
5882
|
14 |
121 |
if (ix == 1 && status != 0 && length < 128) { |
|
|
5 |
9 |
if (ix == 1 && status != 0 && length < 128) { |
|
|
5 |
0 |
if (ix == 1 && status != 0 && length < 128) { |
|
5885
|
5 |
0 |
if (len >= 0) { |
|
5886
|
0 |
5 |
XPUSHs(sv_2mortal(newSVpv(s, len))); |
|
5891
|
40 |
90 |
if ((ix == 0 || ix == 1) && base == 10 && length < 0) { |
|
|
9 |
31 |
if ((ix == 0 || ix == 1) && base == 10 && length < 0) { |
|
|
1 |
98 |
if ((ix == 0 || ix == 1) && base == 10 && length < 0) { |
|
|
1 |
0 |
if ((ix == 0 || ix == 1) && base == 10 && length < 0) { |
|
5894
|
0 |
1 |
if (ix == 1) { |
|
5895
|
0 |
0 |
XPUSHs(sv_2mortal(newSVpv(str, len))); |
|
5898
|
0 |
1 |
if (len == 1 && str[0] == '0') XSRETURN(0); |
|
|
0 |
0 |
if (len == 1 && str[0] == '0') XSRETURN(0); |
|
5901
|
1 |
0 |
EXTEND(SP, (EXTEND_TYPE)len); |
|
|
0 |
1 |
EXTEND(SP, (EXTEND_TYPE)len); |
|
5902
|
45 |
1 |
for (i = 0; i < (int)len; i++) |
|
5903
|
45 |
0 |
PUSH_NPARITY(str[i]-'0'); |
|
|
45 |
0 |
PUSH_NPARITY(str[i]-'0'); |
|
5907
|
31 |
98 |
if (ix == 2) { /* fromdigits */ |
|
5908
|
17 |
14 |
if (!SvROK(svn)) { /* string */ |
|
5909
|
6 |
11 |
if (from_digit_string(&n, SvPV_nolen(svn), base)) { |
|
5912
|
14 |
0 |
} else if (!_is_sv_bigint(aTHX_ svn)) { /* array ref of digits */ |
|
5915
|
13 |
1 |
if (from_digit_to_UV(&n, r, len, base)) { |
|
5918
|
1 |
0 |
} else if (from_digit_to_str(&str, r, len, base)){ |
|
5920
|
0 |
1 |
XPUSHs( sv_to_bigint(aTHX_ sv_2mortal(newSVpv(str,0))) ); |
|
5928
|
11 |
98 |
if (ix == 2) objectify_result(aTHX_ 0, ST(0)); |
|
5935
|
27 |
1 |
if (_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
5937
|
0 |
27 |
XPUSHs(sv_2mortal(newSVpv(str, 0))); |
|
5949
|
0 |
27 |
if (status == 0) |
|
5951
|
0 |
27 |
if (status == -1) |
|
5953
|
26 |
1 |
if (status == 1) |
|
5964
|
0 |
90 |
if (MY_CXT.forcount == 0) croak("lastfor called outside a loop"); |
|
6004
|
0 |
79 |
SETSUBREF(subcv, block); |
|
6006
|
72 |
2 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
|
35 |
37 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
6007
|
0 |
32 |
(svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) { |
|
6011
|
37 |
32 |
if (!svend) { end = beg; beg = 2; } |
|
6019
|
69 |
0 |
if (!CvISXSUB(subcv) && beg <= end) { |
|
|
68 |
1 |
if (!CvISXSUB(subcv) && beg <= end) { |
|
6023
|
0 |
68 |
PUSH_MULTICALL(subcv); |
|
6024
|
47 |
21 |
if (beg < 6) { |
|
6025
|
6 |
41 |
beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5; |
|
|
3 |
3 |
beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5; |
|
6026
|
82 |
39 |
for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) { |
|
|
127 |
41 |
for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) { |
|
|
122 |
5 |
for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) { |
|
6027
|
1 |
121 |
CHECK_FORCOUNT; |
|
6029
|
121 |
0 |
SCOPED_MULTICALL; |
|
|
121 |
0 |
SCOPED_MULTICALL; |
|
6032
|
60 |
8 |
if (beg <= end) { |
|
6035
|
0 |
60 |
(beg >= UVCONST( 100000000000000) && end-beg < 100000) || |
|
|
0 |
0 |
(beg >= UVCONST( 100000000000000) && end-beg < 100000) || |
|
6036
|
0 |
60 |
(beg >= UVCONST( 10000000000000) && end-beg < 40000) || |
|
|
0 |
0 |
(beg >= UVCONST( 10000000000000) && end-beg < 40000) || |
|
6037
|
0 |
60 |
(beg >= UVCONST( 1000000000000) && end-beg < 17000) || |
|
|
0 |
0 |
(beg >= UVCONST( 1000000000000) && end-beg < 17000) || |
|
6039
|
33 |
27 |
((end-beg) < 500) ) { /* MULTICALL next prime */ |
|
6040
|
274 |
32 |
for (beg = next_prime(beg-1); beg <= end && beg != 0; beg = next_prime(beg)) { |
|
|
274 |
0 |
for (beg = next_prime(beg-1); beg <= end && beg != 0; beg = next_prime(beg)) { |
|
6041
|
1 |
273 |
CHECK_FORCOUNT; |
|
6043
|
273 |
0 |
SCOPED_MULTICALL; |
|
|
273 |
0 |
SCOPED_MULTICALL; |
|
6047
|
27 |
2 |
while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) { |
|
6048
|
0 |
27 |
int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg); |
|
|
0 |
0 |
int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg); |
|
6049
|
1266 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
2 |
1264 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
1261 |
3 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
1266 |
17 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
133 |
27 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
6050
|
114 |
1147 |
CHECK_FORCOUNT; |
|
6052
|
165 |
982 |
if (SvTYPE(svarg) != SVt_IV) { sv_setuv(svarg, p); } |
|
6053
|
0 |
982 |
else if (crossuv && p > IV_MAX) { sv_setuv(svarg, p); crossuv=0; } |
|
|
0 |
0 |
else if (crossuv && p > IV_MAX) { sv_setuv(svarg, p); crossuv=0; } |
|
6055
|
1147 |
0 |
SCOPED_MULTICALL; |
|
|
1147 |
0 |
SCOPED_MULTICALL; |
|
6057
|
25 |
2 |
CHECK_FORCOUNT; |
|
6063
|
68 |
0 |
POP_MULTICALL; |
|
6068
|
1 |
0 |
if (beg < 6) { |
|
6069
|
0 |
1 |
beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5; |
|
|
0 |
0 |
beg = (beg <= 2) ? 2 : (beg <= 3) ? 3 : 5; |
|
6070
|
0 |
0 |
for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) { |
|
|
1 |
0 |
for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) { |
|
|
0 |
1 |
for ( ; beg < 6 && beg <= end; beg += 1+(beg>2) ) { |
|
6072
|
0 |
0 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6073
|
0 |
0 |
CHECK_FORCOUNT; |
|
6076
|
0 |
1 |
if (beg <= end) { /* NO-MULTICALL segment sieve */ |
|
6078
|
0 |
0 |
while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) { |
|
6079
|
0 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
0 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
0 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
0 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
0 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
6080
|
0 |
0 |
CHECK_FORCOUNT; |
|
6082
|
0 |
0 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6084
|
0 |
0 |
CHECK_FORCOUNT; |
|
6090
|
0 |
69 |
END_FORCOUNT; |
|
6107
|
0 |
61 |
SETSUBREF(subcv, block); |
|
6109
|
59 |
2 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
|
2 |
57 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
6110
|
0 |
2 |
(svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) { |
|
6114
|
57 |
2 |
if (!svend) { end = beg; beg = ix ? 4 : 9; } |
|
|
31 |
26 |
if (!svend) { end = beg; beg = ix ? 4 : 9; } |
|
6121
|
59 |
0 |
if (!CvISXSUB(subcv) && end >= beg) { |
|
|
57 |
2 |
if (!CvISXSUB(subcv) && end >= beg) { |
|
6128
|
0 |
57 |
PUSH_MULTICALL(subcv); |
|
6129
|
57 |
0 |
if (beg >= MPU_MAX_PRIME || |
|
6131
|
0 |
57 |
(beg >= UVCONST( 100000000000000) && end-beg < 120000) || |
|
|
0 |
0 |
(beg >= UVCONST( 100000000000000) && end-beg < 120000) || |
|
6132
|
0 |
57 |
(beg >= UVCONST( 10000000000000) && end-beg < 50000) || |
|
|
0 |
0 |
(beg >= UVCONST( 10000000000000) && end-beg < 50000) || |
|
6133
|
0 |
57 |
(beg >= UVCONST( 1000000000000) && end-beg < 20000) || |
|
|
0 |
0 |
(beg >= UVCONST( 1000000000000) && end-beg < 20000) || |
|
6135
|
55 |
2 |
end-beg < 1000 ) { |
|
6138
|
3928 |
5 |
while (beg++ < end) { |
|
6139
|
907 |
3021 |
if (beg == nextprime) |
|
6141
|
2058 |
963 |
else if (FORCOMPTEST(ix,beg)) { |
|
|
2058 |
0 |
else if (FORCOMPTEST(ix,beg)) { |
|
|
753 |
1305 |
else if (FORCOMPTEST(ix,beg)) { |
|
6143
|
1716 |
0 |
SCOPED_MULTICALL; |
|
|
1716 |
0 |
SCOPED_MULTICALL; |
|
6145
|
50 |
3878 |
CHECK_FORCOUNT; |
|
6148
|
1 |
1 |
if (!ix) { |
|
6149
|
0 |
1 |
if (beg < 8) beg = 8; |
|
6150
|
1 |
0 |
} else if (beg <= 4) { /* sieve starts at 7, so handle this here */ |
|
6152
|
1 |
0 |
SCOPED_MULTICALL; |
|
|
1 |
0 |
SCOPED_MULTICALL; |
|
6158
|
2 |
0 |
nextprime = (end >= MPU_MAX_PRIME) ? MPU_MAX_PRIME : next_prime(end); |
|
6160
|
2 |
2 |
while (next_segment_primes(ctx, &seg_base, &seg_low, &seg_high)) { |
|
6161
|
0 |
2 |
int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg); |
|
|
0 |
0 |
int crossuv = (seg_high > IV_MAX) && !SvIsUV(svarg); |
|
6162
|
8729 |
0 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
2 |
8727 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
8726 |
1 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
8729 |
352 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
|
354 |
2 |
START_DO_FOR_EACH_SIEVE_PRIME( segment, seg_base, seg_low, seg_high ) |
|
6164
|
1 |
8725 |
if (cbeg < beg) |
|
6165
|
1 |
0 |
cbeg = beg - (ix == 0 && (beg % 2)); |
|
|
1 |
0 |
cbeg = beg - (ix == 0 && (beg % 2)); |
|
6167
|
2 |
8724 |
cend = prevprime-1; if (cend > end) cend = end; |
|
6169
|
6466 |
2260 |
cinc = 1 + (ix==0); |
|
6170
|
29528 |
6766 |
for (c = cbeg + (ix==0); c <= cend; c += cinc) { |
|
6171
|
1960 |
27568 |
CHECK_FORCOUNT; |
|
6172
|
0 |
27568 |
if (SvTYPE(svarg) != SVt_IV) { sv_setuv(svarg,c); } |
|
6173
|
0 |
27568 |
else if (crossuv && c > IV_MAX) { sv_setuv(svarg,c); crossuv=0;} |
|
|
0 |
0 |
else if (crossuv && c > IV_MAX) { sv_setuv(svarg,c); crossuv=0;} |
|
6175
|
27568 |
0 |
SCOPED_MULTICALL; |
|
|
27568 |
0 |
SCOPED_MULTICALL; |
|
6180
|
0 |
2 |
if (end > nextprime) /* Complete the case where end > max_prime */ |
|
6181
|
0 |
0 |
while (nextprime++ < end) |
|
6182
|
0 |
0 |
if (FORCOMPTEST(ix,nextprime)) { |
|
|
0 |
0 |
if (FORCOMPTEST(ix,nextprime)) { |
|
|
0 |
0 |
if (FORCOMPTEST(ix,nextprime)) { |
|
6183
|
0 |
0 |
CHECK_FORCOUNT; |
|
6185
|
0 |
0 |
SCOPED_MULTICALL; |
|
|
0 |
0 |
SCOPED_MULTICALL; |
|
6189
|
57 |
0 |
POP_MULTICALL; |
|
6193
|
0 |
2 |
if (beg <= end) { |
|
6195
|
0 |
0 |
while (beg++ < end) { |
|
6196
|
0 |
0 |
if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) { |
|
|
0 |
0 |
if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) { |
|
|
0 |
0 |
if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) { |
|
|
0 |
0 |
if (FORCOMPTEST(ix,beg) && !is_prob_prime(beg)) { |
|
6198
|
0 |
0 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6199
|
0 |
0 |
CHECK_FORCOUNT; |
|
6204
|
0 |
59 |
END_FORCOUNT; |
|
6216
|
0 |
2 |
SETSUBREF(subcv, block); |
|
6218
|
1 |
1 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
|
0 |
1 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
6219
|
0 |
0 |
(svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) { |
|
6223
|
1 |
0 |
if (!svend) { end = beg; beg = 4; } |
|
6225
|
0 |
1 |
if (beg < 4) beg = 4; |
|
6226
|
0 |
1 |
if (end > MPU_MAX_SEMI_PRIME) end = MPU_MAX_SEMI_PRIME; |
|
6233
|
1 |
0 |
if (!CvISXSUB(subcv) && end >= beg) { |
|
|
1 |
0 |
if (!CvISXSUB(subcv) && end >= beg) { |
|
6238
|
0 |
1 |
PUSH_MULTICALL(subcv); |
|
6239
|
1 |
0 |
if (beg >= MPU_MAX_SEMI_PRIME || |
|
6241
|
0 |
1 |
(beg >= UVCONST(10000000000000000000) && end-beg < 1400000) || |
|
|
0 |
0 |
(beg >= UVCONST(10000000000000000000) && end-beg < 1400000) || |
|
6242
|
0 |
1 |
(beg >= UVCONST( 1000000000000000000) && end-beg < 950000) || |
|
|
0 |
0 |
(beg >= UVCONST( 1000000000000000000) && end-beg < 950000) || |
|
6243
|
0 |
1 |
(beg >= UVCONST( 100000000000000000) && end-beg < 440000) || |
|
|
0 |
0 |
(beg >= UVCONST( 100000000000000000) && end-beg < 440000) || |
|
6244
|
0 |
1 |
(beg >= UVCONST( 10000000000000000) && end-beg < 240000) || |
|
|
0 |
0 |
(beg >= UVCONST( 10000000000000000) && end-beg < 240000) || |
|
6245
|
0 |
1 |
(beg >= UVCONST( 1000000000000000) && end-beg < 65000) || |
|
|
0 |
0 |
(beg >= UVCONST( 1000000000000000) && end-beg < 65000) || |
|
6246
|
0 |
1 |
(beg >= UVCONST( 100000000000000) && end-beg < 29000) || |
|
|
0 |
0 |
(beg >= UVCONST( 100000000000000) && end-beg < 29000) || |
|
6247
|
0 |
1 |
(beg >= UVCONST( 10000000000000) && end-beg < 11000) || |
|
|
0 |
0 |
(beg >= UVCONST( 10000000000000) && end-beg < 11000) || |
|
6248
|
0 |
1 |
(beg >= UVCONST( 1000000000000) && end-beg < 5000) || |
|
|
0 |
0 |
(beg >= UVCONST( 1000000000000) && end-beg < 5000) || |
|
6250
|
0 |
1 |
end-beg < 200 ) { |
|
6251
|
0 |
0 |
for (c = beg; c <= end && c >= beg; c++) { |
|
|
0 |
0 |
for (c = beg; c <= end && c >= beg; c++) { |
|
6252
|
0 |
0 |
if (is_semiprime(c)) { |
|
6254
|
0 |
0 |
SCOPED_MULTICALL; |
|
|
0 |
0 |
SCOPED_MULTICALL; |
|
6256
|
0 |
0 |
CHECK_FORCOUNT; |
|
6259
|
1 |
1 |
while (beg < end) { |
|
6262
|
0 |
1 |
if ((seg_end - seg_beg) > 50000000) seg_end = seg_beg + 50000000 - 1; |
|
6264
|
299 |
1 |
for (c = 0; c < count; c++) { |
|
6266
|
299 |
0 |
SCOPED_MULTICALL; |
|
|
299 |
0 |
SCOPED_MULTICALL; |
|
6267
|
0 |
299 |
CHECK_FORCOUNT; |
|
6271
|
0 |
1 |
CHECK_FORCOUNT; |
|
6275
|
1 |
0 |
POP_MULTICALL; |
|
6279
|
0 |
0 |
if (beg <= end) { |
|
6281
|
0 |
0 |
while (beg++ < end) { |
|
6282
|
0 |
0 |
if (is_semiprime(beg)) { |
|
6284
|
0 |
0 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6285
|
0 |
0 |
CHECK_FORCOUNT; |
|
6290
|
0 |
1 |
END_FORCOUNT; |
|
6302
|
0 |
12 |
SETSUBREF(subcv, block); |
|
6304
|
11 |
1 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
|
1 |
10 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
6305
|
0 |
1 |
(svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) { |
|
6309
|
10 |
1 |
if (!svend) { end = beg; beg = 1; } |
|
6312
|
10 |
1 |
if (k == 0 || k >= BITS_PER_WORD) XSRETURN(0); |
|
|
0 |
10 |
if (k == 0 || k >= BITS_PER_WORD) XSRETURN(0); |
|
6314
|
10 |
0 |
if (beg < (UVCONST(1) << k)) beg = UVCONST(1) << k; |
|
6315
|
0 |
10 |
if (end > max_nth_almost_prime(k)) end = max_nth_almost_prime(k); |
|
6316
|
1 |
9 |
if (beg > end) XSRETURN(0); |
|
6320
|
0 |
9 |
if (k > MPU_MAX_POW3) |
|
6322
|
22 |
2 |
while ((k-shiftres) > 1 && (end >> shiftres) < ipow(3, k - shiftres)) |
|
|
15 |
7 |
while ((k-shiftres) > 1 && (end >> shiftres) < ipow(3, k - shiftres)) |
|
6334
|
9 |
0 |
if (!CvISXSUB(subcv) && end >= beg) { |
|
|
9 |
0 |
if (!CvISXSUB(subcv) && end >= beg) { |
|
6339
|
0 |
9 |
PUSH_MULTICALL(subcv); |
|
6340
|
9 |
9 |
while (beg <= end) { |
|
6345
|
0 |
9 |
if (k > 12) ssize *= 16; |
|
6346
|
9 |
0 |
if (k > 18 || seg_beg > 9*k3) ssize *= 4; |
|
|
0 |
9 |
if (k > 18 || seg_beg > 9*k3) ssize *= 4; |
|
6347
|
9 |
0 |
if (k > 24 || seg_beg > 81*k3) ssize *= 3; |
|
|
0 |
9 |
if (k > 24 || seg_beg > 81*k3) ssize *= 3; |
|
6348
|
0 |
9 |
if ((seg_end - seg_beg) > ssize) seg_end = seg_beg + ssize - 1; |
|
6350
|
999 |
9 |
for (c = 0; c < count; c++) { |
|
6352
|
999 |
0 |
SCOPED_MULTICALL; |
|
|
999 |
0 |
SCOPED_MULTICALL; |
|
6353
|
0 |
999 |
CHECK_FORCOUNT; |
|
6356
|
0 |
9 |
if (seg_end == UV_MAX) break; |
|
6358
|
0 |
9 |
CHECK_FORCOUNT; |
|
6361
|
9 |
0 |
POP_MULTICALL; |
|
6365
|
0 |
0 |
if (beg <= end) { |
|
6366
|
0 |
0 |
for (c = beg; c <= end && c >= beg; c++) { |
|
|
0 |
0 |
for (c = beg; c <= end && c >= beg; c++) { |
|
6367
|
0 |
0 |
if (is_almost_prime(k,c)) { |
|
6369
|
0 |
0 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6370
|
0 |
0 |
CHECK_FORCOUNT; |
|
6375
|
0 |
9 |
END_FORCOUNT; |
|
6388
|
0 |
72 |
SETSUBREF(subcv, block); |
|
6390
|
1 |
71 |
if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
6402
|
71 |
0 |
if (!CvISXSUB(subcv)) { |
|
6406
|
0 |
71 |
PUSH_MULTICALL(subcv); |
|
6407
|
272 |
64 |
for (i = 0; i < ndivisors; i++) { |
|
6409
|
272 |
0 |
SCOPED_MULTICALL; |
|
|
272 |
0 |
SCOPED_MULTICALL; |
|
6410
|
7 |
265 |
CHECK_FORCOUNT; |
|
6413
|
71 |
0 |
POP_MULTICALL; |
|
6418
|
0 |
0 |
for (i = 0; i < ndivisors; i++) { |
|
6420
|
0 |
0 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6421
|
0 |
0 |
CHECK_FORCOUNT; |
|
6426
|
0 |
71 |
END_FORCOUNT; |
|
6441
|
0 |
44 |
SETSUBREF(subcv, block); |
|
6442
|
0 |
44 |
if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS)) { |
|
6446
|
0 |
44 |
if (n > (UV_MAX-2)) croak("%s: argument overflow", SUBNAME); |
|
6448
|
0 |
44 |
New(0, svals, n+1, SV*); |
|
6449
|
738 |
44 |
for (i = 0; i <= n; i++) { |
|
6455
|
16 |
28 |
if (svh != 0) { |
|
6458
|
16 |
0 |
if (!SvROK(svh) || SvTYPE(SvRV(svh)) != SVt_PVHV) |
|
|
0 |
16 |
if (!SvROK(svh) || SvTYPE(SvRV(svh)) != SVt_PVHV) |
|
6461
|
8 |
8 |
if ((svp = hv_fetchs(rhash, "n", 0)) != NULL) |
|
6463
|
9 |
7 |
if ((svp = hv_fetchs(rhash, "amin", 0)) != NULL) amin = my_svuv(*svp); |
|
6464
|
5 |
11 |
if ((svp = hv_fetchs(rhash, "amax", 0)) != NULL) amax = my_svuv(*svp); |
|
6465
|
2 |
14 |
if ((svp = hv_fetchs(rhash, "nmin", 0)) != NULL) nmin = my_svuv(*svp); |
|
6466
|
2 |
14 |
if ((svp = hv_fetchs(rhash, "nmax", 0)) != NULL) nmax = my_svuv(*svp); |
|
6467
|
3 |
13 |
if ((svp = hv_fetchs(rhash, "prime",0)) != NULL) primeq=my_svuv(*svp); |
|
6469
|
0 |
16 |
if (amin < 1) amin = 1; |
|
6470
|
0 |
16 |
if (amax > n) amax = n; |
|
6471
|
0 |
16 |
if (nmin < 1) nmin = 1; |
|
6472
|
0 |
16 |
if (nmax > n) nmax = n; |
|
6473
|
15 |
1 |
if (primeq != 0 && primeq != -1) primeq = 1; /* -1, 0, or 1 */ |
|
|
2 |
13 |
if (primeq != 0 && primeq != -1) primeq = 1; /* -1, 0, or 1 */ |
|
6476
|
2 |
42 |
if (primeq == 1) { |
|
6478
|
1 |
1 |
UV next = amin <= 2 ? 2 : next_prime(amin-1); |
|
6479
|
0 |
2 |
if (amin < next) amin = next; |
|
6480
|
0 |
2 |
if (amax > prev) amax = prev; |
|
6483
|
2 |
42 |
if (n==0 && nmin <= 1) { |
|
|
2 |
0 |
if (n==0 && nmin <= 1) { |
|
6485
|
0 |
2 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6487
|
42 |
2 |
if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0) |
|
|
42 |
0 |
if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0) |
|
|
41 |
1 |
if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0) |
|
|
41 |
0 |
if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0) |
|
|
41 |
0 |
if (n >= nmin && nmin <= nmax && amin <= amax && nmax > 0 && amax > 0) |
|
6490
|
0 |
41 |
New(0, a, n+1, UV); |
|
6495
|
15981 |
27 |
while (k != 0) { |
|
6499
|
15924 |
57 |
r = (ix == 0) ? x : 1; |
|
6500
|
20502 |
15981 |
while (r <= y) { |
|
6508
|
4548 |
15981 |
while (k+1 > nmax) { /* Skip range if over max size */ |
|
6513
|
3617 |
12364 |
if (k+1 < nmin) { /* Skip if not over min size */ |
|
6514
|
9 |
3608 |
if (a[0] >= n-nmin+1 && a[k] > 1) break; /* early exit check */ |
|
|
9 |
0 |
if (a[0] >= n-nmin+1 && a[k] > 1) break; /* early exit check */ |
|
6519
|
9527 |
2837 |
if (amin > 1 || amax < n) { |
|
|
615 |
8912 |
if (amin > 1 || amax < n) { |
|
6521
|
3 |
3449 |
if (a[0] > amax) break; |
|
6523
|
3428 |
21 |
if (ix == 0) { /* value restrictions for partitions */ |
|
6524
|
578 |
2850 |
if (a[k] > amax) continue; |
|
6527
|
51 |
7 |
for (i = 0; i <= k; i++) |
|
6528
|
44 |
7 |
if (a[i] < amin || a[i] > amax) |
|
|
37 |
7 |
if (a[i] < amin || a[i] > amax) |
|
6530
|
14 |
7 |
if (i <= k) continue; |
|
6533
|
2602 |
9167 |
if (primeq != -1) { |
|
6534
|
2510 |
1189 |
for (i = 0; i <= k; i++) if (is_prime(a[i]) != primeq) break; |
|
|
3699 |
92 |
for (i = 0; i <= k; i++) if (is_prime(a[i]) != primeq) break; |
|
6535
|
2510 |
92 |
if (i <= k) continue; |
|
6538
|
0 |
9259 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k+1); |
|
|
9259 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k+1); |
|
|
0 |
9259 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k+1); |
|
6539
|
76536 |
9259 |
for (i = 0; i <= k; i++) { PUSHs(svals[a[i]]); } |
|
6541
|
2 |
9257 |
CHECK_FORCOUNT; |
|
6544
|
0 |
41 |
END_FORCOUNT; |
|
6546
|
738 |
44 |
for (i = 0; i <= n; i++) |
|
6564
|
0 |
34 |
SETSUBREF(subcv, block); |
|
6565
|
13 |
21 |
if (ix > 0 && svk != 0) |
|
|
0 |
13 |
if (ix > 0 && svk != 0) |
|
6568
|
34 |
0 |
if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) || |
|
|
17 |
17 |
if (!_validate_and_set(&n, aTHX_ svn, IFLAG_POS) || |
|
6569
|
0 |
17 |
(svk && !_validate_and_set(&k, aTHX_ svk, IFLAG_POS))) { |
|
6574
|
17 |
17 |
if (svk == 0) { |
|
6575
|
13 |
4 |
begk = (ix == 0) ? 0 : n; |
|
6579
|
1 |
16 |
if (begk > n) |
|
6583
|
0 |
33 |
New(0, svals, n, SV*); |
|
6584
|
134 |
33 |
for (i = 0; i < n; i++) { |
|
6588
|
0 |
33 |
New(0, cm, endk+1, UV); |
|
6592
|
33 |
0 |
if (!CvISXSUB(subcv)) { |
|
6598
|
0 |
33 |
PUSH_MULTICALL(subcv); |
|
6599
|
39 |
30 |
for (k = begk; k <= endk; k++) { |
|
6602
|
1865 |
20672 |
if (ix < 2 || k != 1) { |
|
|
1864 |
1 |
if (ix < 2 || k != 1) { |
|
6606
|
281265 |
22536 |
for (j = k-1; j >= 0; j--) |
|
6608
|
22536 |
0 |
SCOPED_MULTICALL; |
|
|
22536 |
0 |
SCOPED_MULTICALL; |
|
6610
|
3 |
22534 |
CHECK_FORCOUNT; |
|
6611
|
36 |
22498 |
if (_comb_iterate(cm, k, n, ix)) break; |
|
6613
|
3 |
36 |
CHECK_FORCOUNT; |
|
6616
|
33 |
0 |
POP_MULTICALL; |
|
6620
|
0 |
0 |
for (k = begk; k <= endk; k++) { |
|
6623
|
0 |
0 |
if (ix < 2 || k != 1) { |
|
|
0 |
0 |
if (ix < 2 || k != 1) { |
|
6624
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k); |
|
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k); |
|
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)k); |
|
6625
|
0 |
0 |
for (i = 0; i < k; i++) { PUSHs(svals[ cm[k-i-1]-1 ]); } |
|
6628
|
0 |
0 |
CHECK_FORCOUNT; |
|
6629
|
0 |
0 |
if (_comb_iterate(cm, k, n, ix)) break; |
|
6631
|
0 |
0 |
CHECK_FORCOUNT; |
|
6636
|
134 |
33 |
for (i = 0; i < n; i++) |
|
6639
|
0 |
33 |
END_FORCOUNT; |
|
6650
|
0 |
9 |
SETSUBREF(subcv, block); |
|
6653
|
1 |
8 |
if (narrays < 1) XSRETURN(0); |
|
6655
|
17 |
5 |
for (i = 1; i <= narrays; i++) { |
|
6656
|
0 |
17 |
SvGETMAGIC(ST(i)); |
|
|
0 |
0 |
SvGETMAGIC(ST(i)); |
|
6657
|
16 |
1 |
CHECK_ARRAYREF(ST(i)); |
|
|
0 |
16 |
CHECK_ARRAYREF(ST(i)); |
|
6658
|
2 |
14 |
if (av_count((AV *)SvRV(ST(i))) == 0) |
|
6662
|
0 |
5 |
Newz(0, arcnt, narrays, SSize_t); |
|
6663
|
0 |
5 |
New(0, arlen, narrays, SSize_t); |
|
6664
|
0 |
5 |
New(0, arsvs, narrays, SV**); |
|
6666
|
12 |
5 |
for (i = 0; i < narrays; i++) { |
|
6668
|
12 |
0 |
USE_ARREF(inav, ST(i+1), SUBNAME, AR_READ); |
|
|
0 |
12 |
USE_ARREF(inav, ST(i+1), SUBNAME, AR_READ); |
|
|
0 |
12 |
USE_ARREF(inav, ST(i+1), SUBNAME, AR_READ); |
|
6670
|
0 |
12 |
New(0, arsvs[i], len_inav, SV*); |
|
6671
|
23 |
12 |
for (j = 0; j < (SSize_t)len_inav; j++) { |
|
6673
|
23 |
0 |
arsvs[i][j] = v ? v : &PL_sv_undef; |
|
6678
|
5 |
0 |
if (!CvISXSUB(subcv)) { |
|
6685
|
0 |
5 |
PUSH_MULTICALL(subcv); |
|
6689
|
44 |
22 |
for (i = narrays-1; i >= 0; i--) /* Faster to fill backwards */ |
|
6691
|
22 |
0 |
SCOPED_MULTICALL; |
|
|
22 |
0 |
SCOPED_MULTICALL; |
|
6692
|
0 |
22 |
CHECK_FORCOUNT; |
|
6693
|
32 |
5 |
for (i = narrays-1; i >= 0; i--) { |
|
6694
|
15 |
17 |
if (++arcnt[i] >= arlen[i]) arcnt[i] = 0; |
|
6697
|
17 |
5 |
} while (i >= 0); |
|
6699
|
5 |
0 |
POP_MULTICALL; |
|
6704
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)narrays); |
|
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)narrays); |
|
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)narrays); |
|
6705
|
0 |
0 |
for (i = 0; i < narrays; i++) { PUSHs(arsvs[i][arcnt[i]]); } |
|
6707
|
0 |
0 |
CHECK_FORCOUNT; |
|
6708
|
0 |
0 |
for (i = narrays-1; i >= 0; i--) { |
|
6709
|
0 |
0 |
if (++arcnt[i] >= arlen[i]) arcnt[i] = 0; |
|
6712
|
0 |
0 |
} while (i >= 0); |
|
6714
|
12 |
5 |
for (i = 0; i < narrays; i++) |
|
6719
|
0 |
5 |
END_FORCOUNT; |
|
6736
|
0 |
14 |
SETSUBREF(subcv, block); |
|
6738
|
10 |
4 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
|
6 |
4 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
6739
|
0 |
6 |
(svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) { |
|
6743
|
4 |
6 |
if (!svend) { end = beg; beg = 1; } |
|
6744
|
4 |
6 |
if (beg < 1) beg = 1; |
|
6745
|
2 |
8 |
if (beg > end) XSRETURN(0); |
|
6747
|
69 |
8 |
for (maxfactors = 0, n = end >> 1; n; n >>= 1) |
|
6749
|
69 |
8 |
for (i = 0; i < maxfactors; i++) { |
|
6758
|
6 |
2 |
if (beg <= 1) { |
|
6760
|
0 |
6 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6765
|
8 |
0 |
if (!CvISXSUB(subcv)) { |
|
6771
|
0 |
8 |
PUSH_MULTICALL(subcv); |
|
6772
|
2987 |
8 |
for (n = 0; n < end-beg+1; n++) { |
|
6773
|
0 |
2987 |
CHECK_FORCOUNT; |
|
6775
|
1863 |
1124 |
if (nfactors > 0) { |
|
6780
|
4636 |
1863 |
for (i = nfactors-1; i >= 0; i--) { |
|
6787
|
1863 |
0 |
SCOPED_MULTICALL; |
|
|
1863 |
0 |
SCOPED_MULTICALL; |
|
6791
|
8 |
0 |
POP_MULTICALL; |
|
6795
|
0 |
0 |
for (n = 0; n < end-beg+1; n++) { |
|
6796
|
0 |
0 |
CHECK_FORCOUNT; |
|
6798
|
0 |
0 |
if (nfactors > 0) { |
|
6799
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)nfactors); |
|
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)nfactors); |
|
|
0 |
0 |
PUSHMARK(SP); EXTEND(SP, (EXTEND_TYPE)nfactors); |
|
6802
|
0 |
0 |
for (i = 0; i < nfactors; i++) { |
|
6814
|
69 |
8 |
for (i = 0; i < maxfactors; i++) |
|
6816
|
0 |
8 |
END_FORCOUNT; |
|
6828
|
0 |
5 |
SETSUBREF(subcv, block); |
|
6830
|
4 |
1 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
|
3 |
1 |
if (!_validate_and_set(&beg, aTHX_ svbeg, IFLAG_POS) || |
|
6831
|
0 |
3 |
(svend && !_validate_and_set(&end, aTHX_ svend, IFLAG_POS))) { |
|
6835
|
1 |
3 |
if (!svend) { end = beg; beg = 1; } |
|
6836
|
2 |
2 |
if (beg < 1) beg = 1; |
|
6837
|
1 |
3 |
if (beg > end) XSRETURN(0); |
|
6843
|
2 |
1 |
if (beg <= 1) { |
|
6845
|
0 |
2 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6848
|
2 |
3 |
while (beg <= end) { |
|
6850
|
0 |
2 |
if (seghi-seglo > (65536*256)) |
|
6854
|
2 |
0 |
if (!CvISXSUB(subcv)) { |
|
6858
|
0 |
2 |
PUSH_MULTICALL(subcv); |
|
6859
|
109055 |
2 |
for (i = 0; i < seghi-seglo+1; i++) { |
|
6860
|
0 |
109055 |
CHECK_FORCOUNT; |
|
6861
|
66306 |
42749 |
if (isf[i]) { |
|
6863
|
66306 |
0 |
SCOPED_MULTICALL; |
|
|
66306 |
0 |
SCOPED_MULTICALL; |
|
6867
|
2 |
0 |
POP_MULTICALL; |
|
6871
|
0 |
0 |
for (i = 0; i < seghi-seglo+1; i++) { |
|
6872
|
0 |
0 |
CHECK_FORCOUNT; |
|
6873
|
0 |
0 |
if (isf[i]) { |
|
6875
|
0 |
0 |
PUSHMARK(SP); PUTBACK; call_sv((SV*)subcv, G_VOID|G_DISCARD); SPAGAIN; |
|
6879
|
0 |
2 |
if (seghi == UV_MAX) break; |
|
6881
|
0 |
2 |
CHECK_FORCOUNT; |
|
6884
|
0 |
3 |
END_FORCOUNT; |
|
6897
|
0 |
4 |
SETSUBREF(subcv, block); |
|
6898
|
1 |
3 |
if (items <= 1) XSRETURN_UNDEF; |
|
6905
|
3 |
0 |
SvSetMagicSV(ret, args[1]); |
|
|
0 |
3 |
SvSetMagicSV(ret, args[1]); |
|
6907
|
3 |
0 |
if (!CvISXSUB(subcv)) { |
|
6911
|
0 |
3 |
PUSH_MULTICALL(subcv); |
|
6912
|
4 |
3 |
for (i = 2; i < items; i++) { |
|
6914
|
0 |
4 |
SCOPED_MULTICALL; |
|
|
0 |
4 |
SCOPED_MULTICALL; |
|
6915
|
4 |
0 |
SvSetMagicSV(ret, *PL_stack_sp); |
|
|
0 |
4 |
SvSetMagicSV(ret, *PL_stack_sp); |
|
6918
|
3 |
0 |
POP_MULTICALL; |
|
6923
|
0 |
0 |
for (i = 2; i < items; i++) { |
|
6926
|
0 |
0 |
PUSHMARK(SP); |
|
6928
|
0 |
0 |
SvSetMagicSV(ret, *PL_stack_sp); |
|
|
0 |
0 |
SvSetMagicSV(ret, *PL_stack_sp); |
|
6945
|
0 |
5 |
SETSUBREF(subcv, block); |
|
6946
|
2 |
3 |
if (items <= 2) XSRETURN_EMPTY; |
|
6961
|
3 |
0 |
if (!CvISXSUB(subcv)) { |
|
6965
|
0 |
3 |
PUSH_MULTICALL(subcv); |
|
6966
|
9 |
3 |
for (i = 1; i < items-1; i++) { |
|
6971
|
5 |
4 |
SCOPED_MULTICALL; |
|
|
5 |
4 |
SCOPED_MULTICALL; |
|
6975
|
3 |
0 |
POP_MULTICALL; |
|
6980
|
0 |
0 |
for (i = 1; i < items-1; i++) { |
|
6987
|
0 |
0 |
PUSHMARK(SP); |
|
6992
|
9 |
3 |
for (i = 0; i < items-2; i++) |
|
7015
|
0 |
961 |
SETSUBREF(subcv, block); |
|
7019
|
961 |
0 |
if (!CvISXSUB(subcv)) { |
|
7023
|
0 |
961 |
PUSH_MULTICALL(subcv); |
|
7024
|
6583 |
374 |
for (index = 1; index < items; index++) { |
|
7026
|
6265 |
318 |
SCOPED_MULTICALL; |
|
|
6265 |
318 |
SCOPED_MULTICALL; |
|
7027
|
587 |
5996 |
if (SvTRUEx(*PL_stack_sp) ^ invert) |
|
7031
|
961 |
0 |
POP_MULTICALL; |
|
7036
|
0 |
0 |
for (index = 1; index < items; index++) { |
|
7039
|
0 |
0 |
PUSHMARK(SP); |
|
7041
|
0 |
0 |
if (SvTRUEx(*PL_stack_sp) ^ invert) |
|
7046
|
5 |
956 |
if (ix == 4) { |
|
7047
|
2 |
3 |
if (index == items) |
|
7052
|
5 |
951 |
if (ix == 6) { |
|
7053
|
2 |
3 |
if (index == items) |
|
7058
|
581 |
370 |
if (index != items) /* We exited the loop early */ |
|
7061
|
366 |
585 |
if (ret_true) XSRETURN_YES; |
|
7074
|
6 |
1 |
retvals = (GIMME_V != G_SCALAR && GIMME_V != G_VOID); |
|
|
6 |
0 |
retvals = (GIMME_V != G_SCALAR && GIMME_V != G_VOID); |
|
7076
|
86 |
7 |
for (status = 1, nret = 0, j = 0; j < items; j++) { |
|
7078
|
0 |
86 |
if (status == 0) break; |
|
7079
|
48 |
38 |
if (iset_add(&s, n, status) == 0) |
|
7081
|
0 |
38 |
if (iset_sign(s) == 0) { status = 0; break; } |
|
7082
|
28 |
10 |
if (retvals) { |
|
7083
|
22 |
6 |
PUSHs(sv_2mortal(NEWSVINT(status,n))); |
|
7089
|
7 |
0 |
if (status != 0 && retvals) { |
|
|
6 |
1 |
if (status != 0 && retvals) { |
|
7090
|
0 |
6 |
if (nret != sz)croak("vecuniq: iset %lu items, pushed %lu items",sz,nret); |
|
7092
|
1 |
0 |
} else if (status != 0) { |
|
7104
|
0 |
0 |
if (GIMME_V == G_SCALAR) { /* don't build return list if not needed */ |
|
7105
|
0 |
0 |
for (i = 0; i < items; i++) { |
|
7106
|
0 |
0 |
SvGETMAGIC(args[i]); |
|
|
0 |
0 |
SvGETMAGIC(args[i]); |
|
7107
|
0 |
0 |
if (SvOK(args[i])) { |
|
7109
|
0 |
0 |
if (!hv_exists_ent(hv, tmp, 0)) { |
|
7113
|
0 |
0 |
} else if (0 == seen_undef++) |
|
7120
|
0 |
0 |
for (i = 0; i < items; i++) { |
|
7121
|
0 |
0 |
SvGETMAGIC(args[i]); |
|
|
0 |
0 |
SvGETMAGIC(args[i]); |
|
7122
|
0 |
0 |
if (SvOK(args[i])) { |
|
7123
|
0 |
0 |
SvSetSV_nosteal(tmp, args[i]); |
|
7124
|
0 |
0 |
if (!hv_exists_ent(hv, tmp, 0)) { |
|
7128
|
0 |
0 |
} else if (0 == seen_undef++) |
|
7141
|
2 |
12 |
if (items == 0) { |
|
7142
|
1 |
1 |
if (GIMME_V == G_SCALAR) XSRETURN_UV(0); |
|
7147
|
0 |
12 |
New(0, L, len, UV); |
|
7149
|
39 |
9 |
for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) { |
|
|
39 |
0 |
for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) { |
|
|
36 |
3 |
for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) { |
|
7151
|
8 |
28 |
if (n < 0) { |
|
7152
|
1 |
7 |
if (SvIsUV(ST(i))) itype |= IARR_TYPE_POS; |
|
7157
|
9 |
3 |
if (i < len || itype == IARR_TYPE_BAD) { |
|
|
1 |
8 |
if (i < len || itype == IARR_TYPE_BAD) { |
|
7162
|
4 |
4 |
if (itype == IARR_TYPE_NEG) |
|
7167
|
4 |
4 |
if (GIMME_V == G_SCALAR) { |
|
7169
|
13 |
4 |
for (i = 1; i < len; i++) |
|
7170
|
7 |
6 |
if (L[i] != L[i-1]) |
|
7175
|
2 |
2 |
int sign = itype == IARR_TYPE_NEG ? -1 : 1; |
|
7176
|
4 |
0 |
EXTEND(SP, (EXTEND_TYPE)len*2); |
|
|
0 |
4 |
EXTEND(SP, (EXTEND_TYPE)len*2); |
|
7179
|
13 |
4 |
for (i = 1; i < len; i++) { |
|
7180
|
6 |
7 |
if (L[i] == L[i-1]) { count++; continue; } |
|
7181
|
0 |
7 |
PUSHs(sv_2mortal(NEWSVINT(sign,L[i-1]))); /* key */ |
|
7186
|
2 |
2 |
PUSHs(sv_2mortal(NEWSVINT(sign,L[i-1]))); /* key */ |
|
7201
|
1 |
7 |
if (items == 0) { |
|
7202
|
0 |
1 |
if (GIMME_V == G_SCALAR) XSRETURN_UV(0); |
|
7207
|
0 |
7 |
New(0, L, len, UV); |
|
7211
|
52 |
3 |
for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) { |
|
|
52 |
0 |
for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) { |
|
|
48 |
4 |
for (i = 0; i < len && itype != IARR_TYPE_BAD && SVNUMTEST(ST(i)); i++) { |
|
7214
|
2 |
46 |
if (n < 0) { |
|
7215
|
0 |
2 |
if (SvIsUV(ST(i))) itype |= IARR_TYPE_POS; |
|
7219
|
22 |
26 |
if (!iset_add(&seen, n, sign)) |
|
7222
|
0 |
7 |
if (iset_is_invalid(seen)) itype = IARR_TYPE_BAD; /* Poison the type */ |
|
7224
|
3 |
4 |
if (i < len || itype == IARR_TYPE_BAD) { |
|
|
0 |
3 |
if (i < len || itype == IARR_TYPE_BAD) { |
|
7230
|
1 |
2 |
if (GIMME_V != G_ARRAY) { |
|
7231
|
23 |
1 |
for (i = 0, count = 0; i < len; i++) |
|
7232
|
2 |
21 |
if (!iset_contains(dups, L[i])) |
|
7237
|
24 |
2 |
for (i = 0, retlen = 0; i < len; i++) |
|
7238
|
3 |
21 |
if (!iset_contains(dups, L[i])) |