| line |
true |
false |
branch |
|
142
|
0 |
22101 |
if (!SvROK(obj)) return result; |
|
144
|
22101 |
0 |
while (mg) { |
|
145
|
22093 |
8 |
if (mg->mg_virtual == &heap_vtbl) { |
|
150
|
8 |
0 |
if (mg->mg_virtual == &numeric_heap_vtbl) { |
|
172
|
0 |
7 |
if (!SvROK(obj)) croak("Not a reference"); |
|
174
|
7 |
0 |
while (mg) { |
|
175
|
7 |
0 |
if (mg->mg_virtual == &heap_vtbl) { |
|
209
|
3809 |
605 |
while (idx > 0) { |
|
212
|
5 |
3804 |
if (val_nv < parent_nv) { |
|
228
|
10 |
405 |
while (idx > 0) { |
|
231
|
6 |
4 |
if (val_nv > parent_nv) { |
|
248
|
18849 |
5976 |
while (idx < half) { |
|
254
|
18425 |
424 |
if (right < size) { |
|
256
|
8265 |
10160 |
if (right_nv < best_nv) { |
|
262
|
18283 |
566 |
if (best_nv < val_nv) { |
|
279
|
1617 |
810 |
while (idx < half) { |
|
285
|
1613 |
4 |
if (right < size) { |
|
287
|
804 |
809 |
if (right_nv > best_nv) { |
|
293
|
1212 |
405 |
if (best_nv > val_nv) { |
|
310
|
0 |
0 |
if (items != 2) croak("Usage: push_heap_min(\\@array, $value)"); |
|
311
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
332
|
0 |
0 |
if (items != 2) croak("Usage: push_heap_max(\\@array, $value)"); |
|
333
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
355
|
0 |
0 |
if (items != 1) croak("Usage: pop_heap_min(\\@array)"); |
|
356
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
363
|
0 |
0 |
if (size == 0) XSRETURN_UNDEF; |
|
368
|
0 |
0 |
if (size > 1) { |
|
388
|
0 |
0 |
if (items != 1) croak("Usage: pop_heap_max(\\@array)"); |
|
389
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
396
|
0 |
0 |
if (size == 0) XSRETURN_UNDEF; |
|
401
|
0 |
0 |
if (size > 1) { |
|
419
|
0 |
0 |
if (items != 1) croak("Usage: make_heap_min(\\@array)"); |
|
420
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
428
|
0 |
0 |
for (i = (size >> 1) - 1; i >= 0; i--) { |
|
441
|
0 |
0 |
if (items != 1) croak("Usage: make_heap_max(\\@array)"); |
|
442
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
|
0 |
0 |
if (!SvROK(ST(0)) || SvTYPE(SvRV(ST(0))) != SVt_PVAV) { |
|
449
|
0 |
0 |
for (i = (size >> 1) - 1; i >= 0; i--) { |
|
469
|
4409 |
1 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
|
0 |
4409 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
492
|
410 |
0 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
|
1 |
409 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
515
|
5435 |
1 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
|
0 |
5435 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
521
|
2 |
5433 |
if (size == 0) { |
|
529
|
4824 |
609 |
if (size > 1) { |
|
550
|
411 |
1 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
|
0 |
411 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
556
|
1 |
410 |
if (size == 0) { |
|
564
|
8 |
402 |
if (size > 1) { |
|
583
|
413 |
1 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
|
0 |
413 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
589
|
1718 |
413 |
for (i = (size >> 1) - 1; i >= 0; i--) { |
|
604
|
406 |
0 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
|
1 |
405 |
if (!SvROK(aref) || SvTYPE(SvRV(aref)) != SVt_PVAV) |
|
610
|
1207 |
405 |
for (i = (size >> 1) - 1; i >= 0; i--) { |
|
623
|
15 |
5468 |
if (needed > h->capacity) { |
|
624
|
15 |
0 |
IV new_cap = h->capacity ? h->capacity * 2 : 16; |
|
625
|
5 |
15 |
while (new_cap < needed) new_cap *= 2; |
|
626
|
0 |
15 |
Renew(h->data, new_cap, NV); |
|
636
|
4297 |
1314 |
while (idx > 0) { |
|
638
|
1359 |
2938 |
if (val < data[parent]) { |
|
653
|
3470 |
1040 |
while (idx > 0) { |
|
655
|
2463 |
1007 |
if (val > data[parent]) { |
|
672
|
8687 |
1277 |
while (idx < half) { |
|
678
|
8615 |
72 |
if (right < size && data[right] < best_nv) { |
|
|
4188 |
4427 |
if (right < size && data[right] < best_nv) { |
|
683
|
8302 |
385 |
if (best_nv < val) { |
|
700
|
8318 |
1252 |
while (idx < half) { |
|
706
|
7907 |
411 |
if (right < size && data[right] > best_nv) { |
|
|
3714 |
4193 |
if (right < size && data[right] > best_nv) { |
|
711
|
7751 |
567 |
if (best_nv > val) { |
|
724
|
271 |
0 |
if (h->data) Safefree(h->data); |
|
738
|
270 |
1 |
if (items >= 1 && SvPOK(ST(0))) { |
|
|
270 |
0 |
if (items >= 1 && SvPOK(ST(0))) { |
|
741
|
0 |
270 |
if (len == 8 && strEQ(str, "Heap::PQ")) { |
|
|
0 |
0 |
if (len == 8 && strEQ(str, "Heap::PQ")) { |
|
743
|
270 |
0 |
} else if (len == 3 && (strEQ(str, "min") || strEQ(str, "max"))) { |
|
|
210 |
60 |
} else if (len == 3 && (strEQ(str, "min") || strEQ(str, "max"))) { |
|
|
210 |
0 |
} else if (len == 3 && (strEQ(str, "min") || strEQ(str, "max"))) { |
|
750
|
270 |
1 |
if (items > arg_offset) { |
|
753
|
270 |
0 |
if (len == 3 && strEQ(type_str, "max")) { |
|
|
210 |
60 |
if (len == 3 && strEQ(type_str, "max")) { |
|
781
|
0 |
5268 |
if (items != 2) croak("Usage: $heap->push($value)"); |
|
790
|
4224 |
1044 |
if (h->type == HEAP_MIN) { |
|
807
|
0 |
206 |
if (items < 1) croak("Usage: $heap->push_all(@values)"); |
|
815
|
2022 |
206 |
for (i = 1; i < items; i++) { |
|
820
|
1 |
205 |
if (items - 1 > 10) { |
|
823
|
500 |
1 |
for (j = (h->size >> 1) - 1; j >= 0; j--) { |
|
824
|
500 |
0 |
if (h->type == HEAP_MIN) { |
|
832
|
1022 |
205 |
for (i = start_size; i < h->size; i++) { |
|
833
|
22 |
1000 |
if (h->type == HEAP_MIN) { |
|
851
|
0 |
4174 |
if (items != 1) croak("Usage: $heap->pop()"); |
|
855
|
5 |
4169 |
if (h->size == 0) XSRETURN_UNDEF; |
|
860
|
2937 |
1232 |
if (h->size > 0) { |
|
862
|
1127 |
1810 |
if (h->type == HEAP_MIN) { |
|
878
|
0 |
1016 |
if (items != 1) croak("Usage: $heap->peek()"); |
|
882
|
2 |
1014 |
if (h->size == 0) XSRETURN_UNDEF; |
|
893
|
0 |
1025 |
if (items != 1) croak("Usage: $heap->size()"); |
|
904
|
0 |
3295 |
if (items != 1) croak("Usage: $heap->is_empty()"); |
|
908
|
220 |
3075 |
if (h->size == 0) XSRETURN_YES; |
|
917
|
0 |
203 |
if (items != 1) croak("Usage: $heap->clear()"); |
|
932
|
0 |
6 |
if (items != 2) croak("Usage: $heap->peek_n($n)"); |
|
937
|
6 |
0 |
if (n <= 0 || h->size == 0) XSRETURN_EMPTY; |
|
|
1 |
5 |
if (n <= 0 || h->size == 0) XSRETURN_EMPTY; |
|
938
|
1 |
4 |
if (n > h->size) n = h->size; |
|
941
|
0 |
5 |
Newx(saved, h->size, NV); |
|
942
|
0 |
5 |
Copy(h->data, saved, h->size, NV); |
|
946
|
5 |
0 |
EXTEND(SP, n); |
|
|
0 |
5 |
EXTEND(SP, n); |
|
947
|
19 |
5 |
for (i = 0; i < n; i++) { |
|
950
|
18 |
1 |
if (h->size > 0) { |
|
952
|
16 |
2 |
if (h->type == HEAP_MIN) |
|
962
|
0 |
5 |
Copy(saved, h->data, saved_size, NV); |
|
977
|
0 |
4 |
if (items != 2) croak("Usage: $heap->search(sub { ... })"); |
|
982
|
4 |
0 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
1 |
3 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
985
|
1 |
2 |
if (h->size == 0) XSRETURN_EMPTY; |
|
987
|
0 |
2 |
Newx(results, h->size, NV); |
|
989
|
8 |
2 |
for (i = 0; i < h->size; i++) { |
|
999
|
0 |
8 |
PUSHMARK(SP); |
|
1000
|
0 |
8 |
XPUSHs(elem); |
|
1005
|
8 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1006
|
8 |
0 |
if (count > 0) POPs; |
|
1008
|
8 |
0 |
FREETMPS; LEAVE; |
|
1010
|
2 |
6 |
if (result) { |
|
1015
|
2 |
0 |
EXTEND(SP, found); |
|
|
0 |
2 |
EXTEND(SP, found); |
|
1016
|
2 |
2 |
for (i = 0; i < found; i++) { |
|
1030
|
0 |
5 |
if (items != 2) croak("Usage: $heap->delete(sub { ... })"); |
|
1035
|
5 |
0 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
1 |
4 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
1038
|
24 |
4 |
for (i = 0; i < h->size; i++) { |
|
1048
|
0 |
24 |
PUSHMARK(SP); |
|
1049
|
0 |
24 |
XPUSHs(elem); |
|
1054
|
24 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1055
|
24 |
0 |
if (count > 0) POPs; |
|
1057
|
24 |
0 |
FREETMPS; LEAVE; |
|
1059
|
12 |
12 |
if (result) { |
|
1062
|
3 |
9 |
if (write_pos != i) { |
|
1072
|
4 |
0 |
if (deleted > 0 && h->size > 1) { |
|
|
3 |
1 |
if (deleted > 0 && h->size > 1) { |
|
1074
|
5 |
3 |
for (j = (h->size >> 1) - 1; j >= 0; j--) { |
|
1075
|
3 |
2 |
if (h->type == HEAP_MIN) |
|
1090
|
14 |
5763 |
if (needed > h->capacity) { |
|
1091
|
14 |
0 |
IV new_cap = h->capacity ? h->capacity * 2 : 16; |
|
1092
|
0 |
14 |
while (new_cap < needed) new_cap *= 2; |
|
1093
|
0 |
14 |
Renew(h->data, new_cap, SV*); |
|
1094
|
0 |
14 |
Renew(h->priorities, new_cap, NV); |
|
1107
|
2758 |
3181 |
while (idx > 0) { |
|
1109
|
1384 |
1374 |
if (val_nv < prio[parent]) { |
|
1128
|
49 |
21 |
while (idx > 0) { |
|
1130
|
21 |
28 |
if (val_nv > prio[parent]) { |
|
1151
|
8124 |
1056 |
while (idx < half) { |
|
1157
|
8027 |
97 |
if (right < size) { |
|
1159
|
3917 |
4110 |
if (right_nv < best_nv) { |
|
1165
|
7885 |
239 |
if (best_nv < val_nv) { |
|
1186
|
24 |
21 |
while (idx < half) { |
|
1192
|
15 |
9 |
if (right < size) { |
|
1194
|
8 |
7 |
if (right_nv > best_nv) { |
|
1200
|
17 |
7 |
if (best_nv > val_nv) { |
|
1219
|
0 |
4656 |
PUSHMARK(SP); |
|
1220
|
0 |
4656 |
XPUSHs(a); |
|
1221
|
0 |
4656 |
XPUSHs(b); |
|
1227
|
0 |
4656 |
if (count != 1) croak("Comparator must return exactly one value"); |
|
1230
|
4656 |
0 |
FREETMPS; LEAVE; |
|
1232
|
4650 |
6 |
return h->type == HEAP_MIN ? result < 0 : result > 0; |
|
1236
|
1162 |
153 |
while (idx > 0) { |
|
1238
|
125 |
1037 |
if (heap_compare_custom(aTHX_ h, h->data[idx], h->data[parent])) { |
|
1255
|
1863 |
814 |
if (left < h->size && heap_compare_custom(aTHX_ h, h->data[left], h->data[best])) { |
|
|
1606 |
257 |
if (left < h->size && heap_compare_custom(aTHX_ h, h->data[left], h->data[best])) { |
|
1258
|
1631 |
1046 |
if (right < h->size && heap_compare_custom(aTHX_ h, h->data[right], h->data[best])) { |
|
|
494 |
1137 |
if (right < h->size && heap_compare_custom(aTHX_ h, h->data[right], h->data[best])) { |
|
1262
|
1628 |
1049 |
if (best != idx) { |
|
1277
|
260 |
0 |
if (!PL_dirty) { |
|
1279
|
248 |
260 |
for (i = 0; i < h->size; i++) { |
|
1280
|
248 |
0 |
if (h->data[i]) SvREFCNT_dec(h->data[i]); |
|
1282
|
130 |
130 |
if (h->comparator) SvREFCNT_dec(h->comparator); |
|
1284
|
260 |
0 |
if (h->data) Safefree(h->data); |
|
1285
|
260 |
0 |
if (h->priorities) Safefree(h->priorities); |
|
1302
|
6 |
3 |
if (nh->type == HEAP_MIN) { |
|
1317
|
1 |
10 |
if (nh->size == 0) { |
|
1323
|
8 |
2 |
if (nh->size > 0) { |
|
1325
|
6 |
2 |
if (nh->type == HEAP_MIN) { |
|
1331
|
0 |
10 |
SETn(result); |
|
1340
|
1 |
5 |
if (nh->size == 0) { |
|
1344
|
0 |
5 |
SETn(nh->data[0]); |
|
1352
|
0 |
5 |
SETi(nh->size); |
|
1359
|
0 |
0 |
if (nh->size == 0) { SETs(&PL_sv_yes); } |
|
1380
|
3 |
0 |
if (n <= 0 || nh->size == 0) RETURN; |
|
|
0 |
3 |
if (n <= 0 || nh->size == 0) RETURN; |
|
1381
|
0 |
3 |
if (n > nh->size) n = nh->size; |
|
1386
|
0 |
3 |
Newx(saved, saved_size, NV); |
|
1387
|
0 |
3 |
Copy(nh->data, saved, saved_size, NV); |
|
1389
|
3 |
0 |
EXTEND(SP, n); |
|
|
0 |
3 |
EXTEND(SP, n); |
|
1390
|
8 |
3 |
for (i = 0; i < n; i++) { |
|
1393
|
8 |
0 |
if (nh->size > 0) { |
|
1395
|
6 |
2 |
if (nh->type == HEAP_MIN) nv_sift_down_min(nh, 0); |
|
1401
|
0 |
3 |
Copy(saved, nh->data, saved_size, NV); |
|
1417
|
1 |
3 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1419
|
1 |
0 |
if (n <= 0 || nh->size == 0) RETURN; |
|
|
0 |
1 |
if (n <= 0 || nh->size == 0) RETURN; |
|
1420
|
0 |
1 |
if (n > nh->size) n = nh->size; |
|
1425
|
0 |
1 |
Newx(saved, saved_size, NV); |
|
1426
|
0 |
1 |
Copy(nh->data, saved, saved_size, NV); |
|
1428
|
1 |
0 |
EXTEND(SP, n); |
|
|
0 |
1 |
EXTEND(SP, n); |
|
1429
|
2 |
1 |
for (i = 0; i < n; i++) { |
|
1432
|
2 |
0 |
if (nh->size > 0) { |
|
1434
|
2 |
0 |
if (nh->type == HEAP_MIN) nv_sift_down_min(nh, 0); |
|
1440
|
0 |
1 |
Copy(saved, nh->data, saved_size, NV); |
|
1447
|
3 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1449
|
3 |
0 |
if (n <= 0 || h->size == 0) RETURN; |
|
|
1 |
2 |
if (n <= 0 || h->size == 0) RETURN; |
|
1450
|
0 |
2 |
if (n > h->size) n = h->size; |
|
1456
|
0 |
2 |
Newx(saved_data, saved_size, SV*); |
|
1457
|
0 |
2 |
Newx(saved_pri, saved_size, NV); |
|
1458
|
0 |
2 |
Copy(h->data, saved_data, saved_size, SV*); |
|
1459
|
0 |
2 |
Copy(h->priorities, saved_pri, saved_size, NV); |
|
1461
|
2 |
0 |
EXTEND(SP, n); |
|
|
0 |
2 |
EXTEND(SP, n); |
|
1462
|
5 |
2 |
for (i = 0; i < n; i++) { |
|
1465
|
5 |
0 |
if (h->size > 0) { |
|
1472
|
0 |
2 |
Copy(saved_data, h->data, saved_size, SV*); |
|
1473
|
0 |
2 |
Copy(saved_pri, h->priorities, saved_size, NV); |
|
1496
|
1 |
0 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
0 |
1 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
1499
|
0 |
1 |
if (nh->size == 0) RETURN; |
|
1501
|
0 |
1 |
Newx(results, nh->size, NV); |
|
1503
|
5 |
1 |
for (i = 0; i < nh->size; i++) { |
|
1513
|
0 |
5 |
PUSHMARK(SP); |
|
1514
|
0 |
5 |
XPUSHs(elem); |
|
1519
|
5 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1520
|
5 |
0 |
if (count > 0) POPs; |
|
1522
|
5 |
0 |
FREETMPS; LEAVE; |
|
1524
|
3 |
2 |
if (result) { |
|
1529
|
1 |
0 |
EXTEND(SP, found); |
|
|
0 |
1 |
EXTEND(SP, found); |
|
1530
|
3 |
1 |
for (i = 0; i < found; i++) { |
|
1548
|
1 |
0 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
0 |
1 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
1551
|
5 |
1 |
for (i = 0; i < nh->size; i++) { |
|
1561
|
0 |
5 |
PUSHMARK(SP); |
|
1562
|
0 |
5 |
XPUSHs(elem); |
|
1567
|
5 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1568
|
5 |
0 |
if (count > 0) POPs; |
|
1570
|
5 |
0 |
FREETMPS; LEAVE; |
|
1572
|
2 |
3 |
if (result) { |
|
1575
|
1 |
2 |
if (write_pos != i) { |
|
1584
|
1 |
0 |
if (deleted > 0 && nh->size > 1) { |
|
|
1 |
0 |
if (deleted > 0 && nh->size > 1) { |
|
1586
|
1 |
1 |
for (j = (nh->size >> 1) - 1; j >= 0; j--) { |
|
1587
|
0 |
1 |
if (nh->type == HEAP_MIN) |
|
1594
|
0 |
1 |
SETi(deleted); |
|
1608
|
3 |
0 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
0 |
3 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
1611
|
1 |
2 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1615
|
0 |
1 |
if (nh->size == 0) RETURN; |
|
1617
|
0 |
1 |
Newx(results, nh->size, NV); |
|
1619
|
5 |
1 |
for (i = 0; i < nh->size; i++) { |
|
1629
|
0 |
5 |
PUSHMARK(SP); |
|
1630
|
0 |
5 |
XPUSHs(elem); |
|
1635
|
5 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1636
|
5 |
0 |
if (count > 0) POPs; |
|
1638
|
5 |
0 |
FREETMPS; LEAVE; |
|
1640
|
2 |
3 |
if (result) { |
|
1645
|
1 |
0 |
EXTEND(SP, found); |
|
|
0 |
1 |
EXTEND(SP, found); |
|
1646
|
2 |
1 |
for (i = 0; i < found; i++) { |
|
1653
|
2 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1657
|
1 |
1 |
if (h->size == 0) RETURN; |
|
1659
|
0 |
1 |
Newx(results, h->size, SV*); |
|
1661
|
8 |
1 |
for (i = 0; i < h->size; i++) { |
|
1670
|
0 |
8 |
PUSHMARK(SP); |
|
1671
|
0 |
8 |
XPUSHs(h->data[i]); |
|
1676
|
8 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1677
|
8 |
0 |
if (count > 0) POPs; |
|
1679
|
8 |
0 |
FREETMPS; LEAVE; |
|
1681
|
3 |
5 |
if (result) { |
|
1686
|
1 |
0 |
EXTEND(SP, found); |
|
|
0 |
1 |
EXTEND(SP, found); |
|
1687
|
3 |
1 |
for (i = 0; i < found; i++) { |
|
1709
|
3 |
0 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
0 |
3 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
1712
|
1 |
2 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1715
|
8 |
1 |
for (i = 0; i < nh->size; i++) { |
|
1725
|
0 |
8 |
PUSHMARK(SP); |
|
1726
|
0 |
8 |
XPUSHs(elem); |
|
1731
|
8 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1732
|
8 |
0 |
if (count > 0) POPs; |
|
1734
|
8 |
0 |
FREETMPS; LEAVE; |
|
1736
|
3 |
5 |
if (result) { |
|
1739
|
2 |
3 |
if (write_pos != i) { |
|
1748
|
1 |
0 |
if (deleted > 0 && nh->size > 1) { |
|
|
1 |
0 |
if (deleted > 0 && nh->size > 1) { |
|
1750
|
2 |
1 |
for (j = (nh->size >> 1) - 1; j >= 0; j--) { |
|
1751
|
2 |
0 |
if (nh->type == HEAP_MIN) |
|
1758
|
0 |
1 |
PUSHi(deleted); |
|
1762
|
2 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1765
|
8 |
2 |
for (i = 0; i < h->size; i++) { |
|
1774
|
0 |
8 |
PUSHMARK(SP); |
|
1775
|
0 |
8 |
XPUSHs(h->data[i]); |
|
1780
|
8 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
1781
|
8 |
0 |
if (count > 0) POPs; |
|
1783
|
8 |
0 |
FREETMPS; LEAVE; |
|
1785
|
3 |
5 |
if (result) { |
|
1789
|
2 |
3 |
if (write_pos != i) { |
|
1799
|
1 |
1 |
if (deleted > 0 && h->size > 1) { |
|
|
1 |
0 |
if (deleted > 0 && h->size > 1) { |
|
1801
|
2 |
1 |
for (j = (h->size >> 1) - 1; j >= 0; j--) { |
|
1806
|
0 |
2 |
PUSHi(deleted); |
|
1820
|
0 |
1030 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1826
|
0 |
0 |
if (nh->type == HEAP_MIN) { |
|
1836
|
1030 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1841
|
3 |
1027 |
if (h->comparator) { |
|
1867
|
0 |
1010 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1869
|
0 |
0 |
if (nh->size == 0) { |
|
1875
|
0 |
0 |
if (nh->size > 0) { |
|
1877
|
0 |
0 |
if (nh->type == HEAP_MIN) { |
|
1887
|
1010 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1889
|
1 |
1009 |
if (h->size == 0) { |
|
1895
|
7 |
1002 |
if (h->size > 0) { |
|
1913
|
0 |
1005 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1915
|
0 |
0 |
SETs(nh->size > 0 ? sv_2mortal(newSVnv(nh->data[0])) : &PL_sv_undef); |
|
1919
|
1005 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1921
|
1004 |
1 |
SETs(h->size > 0 ? h->data[0] : &PL_sv_undef); |
|
1934
|
0 |
1008 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1939
|
1008 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1953
|
3 |
4 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1954
|
2 |
1 |
if (lookup.ptr.nheap->size == 0) { SETs(&PL_sv_yes); } |
|
1959
|
4 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1960
|
3 |
1 |
if (lookup.ptr.heap->size == 0) { SETs(&PL_sv_yes); } |
|
1974
|
1 |
1 |
if (lookup.type == MAGIC_NUMERIC) { |
|
1980
|
1 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
1983
|
5 |
1 |
for (i = 0; i < h->size; i++) { |
|
1984
|
5 |
0 |
if (h->data[i]) SvREFCNT_dec(h->data[i]); |
|
2000
|
1 |
2 |
if (lookup.type == MAGIC_NUMERIC) { |
|
2001
|
0 |
1 |
if (lookup.ptr.nheap->type == HEAP_MIN) |
|
2008
|
2 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
2009
|
1 |
1 |
if (lookup.ptr.heap->type == HEAP_MIN) |
|
2031
|
101 |
0 |
if (!OpHAS_SIBLING(pushop)) pushop = cUNOPx(pushop)->op_first; |
|
2033
|
101 |
0 |
heapop = OpSIBLING(pushop); |
|
2034
|
0 |
101 |
if (!heapop) return entersubop; |
|
2036
|
101 |
0 |
cvop = OpSIBLING(heapop); |
|
2037
|
0 |
101 |
if (!cvop) return entersubop; |
|
2038
|
101 |
0 |
if (OpSIBLING(heapop) != cvop) return entersubop; |
|
|
0 |
101 |
if (OpSIBLING(heapop) != cvop) return entersubop; |
|
2059
|
66 |
0 |
if (!OpHAS_SIBLING(pushop)) pushop = cUNOPx(pushop)->op_first; |
|
2061
|
66 |
0 |
heapop = OpSIBLING(pushop); |
|
2062
|
0 |
66 |
if (!heapop) return entersubop; |
|
2064
|
66 |
0 |
valop = OpSIBLING(heapop); |
|
2065
|
0 |
66 |
if (!valop) return entersubop; |
|
2067
|
66 |
0 |
cvop = OpSIBLING(valop); |
|
2068
|
0 |
66 |
if (!cvop) return entersubop; |
|
2069
|
66 |
0 |
if (OpSIBLING(valop) != cvop) return entersubop; |
|
|
0 |
66 |
if (OpSIBLING(valop) != cvop) return entersubop; |
|
2093
|
243 |
17 |
if (items >= 1 && SvPOK(ST(0))) { |
|
|
243 |
0 |
if (items >= 1 && SvPOK(ST(0))) { |
|
2096
|
0 |
243 |
if (len == 8 && strEQ(str, "Heap::PQ")) { |
|
|
0 |
0 |
if (len == 8 && strEQ(str, "Heap::PQ")) { |
|
2098
|
243 |
0 |
} else if (len == 3 && (strEQ(str, "min") || strEQ(str, "max"))) { |
|
|
14 |
229 |
} else if (len == 3 && (strEQ(str, "min") || strEQ(str, "max"))) { |
|
|
14 |
0 |
} else if (len == 3 && (strEQ(str, "min") || strEQ(str, "max"))) { |
|
2105
|
243 |
17 |
if (items > arg_offset) { |
|
2108
|
243 |
0 |
if (len == 3 && strEQ(type_str, "max")) { |
|
|
14 |
229 |
if (len == 3 && strEQ(type_str, "max")) { |
|
2110
|
229 |
0 |
} else if (len == 3 && strEQ(type_str, "min")) { |
|
|
229 |
0 |
} else if (len == 3 && strEQ(type_str, "min")) { |
|
2117
|
130 |
130 |
if (items > arg_offset + 1) { |
|
2119
|
130 |
0 |
if (SvROK(cmp_arg) && SvTYPE(SvRV(cmp_arg)) == SVt_PVCV) { |
|
|
130 |
0 |
if (SvROK(cmp_arg) && SvTYPE(SvRV(cmp_arg)) == SVt_PVCV) { |
|
2121
|
0 |
0 |
} else if (SvOK(cmp_arg)) { |
|
2134
|
130 |
130 |
if (comparator) { |
|
2137
|
118 |
12 |
} else if (type == HEAP_MIN) { |
|
2160
|
0 |
4740 |
if (items != 2) croak("Usage: $heap->push($value)"); |
|
2164
|
0 |
4740 |
if (hl.type == MAGIC_NUMERIC) { |
|
2170
|
0 |
0 |
if (nh->type == HEAP_MIN) |
|
2184
|
1184 |
3556 |
if (h->comparator) { |
|
2207
|
0 |
7 |
if (items < 1) croak("Usage: $heap->push_all(@values)"); |
|
2215
|
24 |
7 |
for (i = 1; i < items; i++) { |
|
2219
|
21 |
3 |
if (!h->comparator) h->priorities[h->size] = prio; |
|
2224
|
0 |
7 |
if (items - 1 > 10) { |
|
2226
|
0 |
0 |
for (j = (h->size >> 1) - 1; j >= 0; j--) { |
|
2230
|
24 |
7 |
for (i = start_size; i < h->size; i++) { |
|
2243
|
0 |
4594 |
if (items != 1) croak("Usage: $heap->pop()"); |
|
2247
|
0 |
4594 |
if (hl.type == MAGIC_NUMERIC) { |
|
2250
|
0 |
0 |
if (nh->size == 0) XSRETURN_UNDEF; |
|
2253
|
0 |
0 |
if (nh->size > 0) { |
|
2255
|
0 |
0 |
if (nh->type == HEAP_MIN) |
|
2268
|
108 |
4486 |
if (h->size == 0) XSRETURN_UNDEF; |
|
2273
|
2321 |
2165 |
if (h->size > 0) { |
|
2288
|
0 |
2042 |
if (items != 1) croak("Usage: $heap->peek()"); |
|
2292
|
0 |
2042 |
if (hl.type == MAGIC_NUMERIC) { |
|
2294
|
0 |
0 |
if (nh->size == 0) XSRETURN_UNDEF; |
|
2301
|
2 |
2040 |
if (h->size == 0) XSRETURN_UNDEF; |
|
2311
|
0 |
2064 |
if (items != 1) croak("Usage: $heap->size()"); |
|
2315
|
0 |
2064 |
if (hl.type == MAGIC_NUMERIC) |
|
2325
|
0 |
4344 |
if (items != 1) croak("Usage: $heap->is_empty()"); |
|
2329
|
0 |
4344 |
if (lookup.type == MAGIC_NUMERIC) { |
|
2330
|
0 |
0 |
if (lookup.ptr.nheap->size == 0) XSRETURN_YES; |
|
2333
|
4344 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
2334
|
2131 |
2213 |
if (lookup.ptr.heap->size == 0) XSRETURN_YES; |
|
2344
|
0 |
203 |
if (items != 1) croak("Usage: $heap->clear()"); |
|
2348
|
0 |
203 |
if (lookup.type == MAGIC_NUMERIC) { |
|
2352
|
203 |
0 |
if (lookup.type == MAGIC_HEAP) { |
|
2355
|
25 |
203 |
for (i = 0; i < h->size; i++) { |
|
2356
|
25 |
0 |
if (h->data[i]) SvREFCNT_dec(h->data[i]); |
|
2369
|
0 |
4 |
if (items != 1) croak("Usage: $heap->type()"); |
|
2373
|
0 |
4 |
if (lookup.type == MAGIC_NUMERIC) { |
|
2375
|
4 |
0 |
} else if (lookup.type == MAGIC_HEAP) { |
|
2381
|
2 |
2 |
if (type == HEAP_MIN) { |
|
2395
|
0 |
13 |
if (items != 2) croak("Usage: $heap->peek_n($n)"); |
|
2400
|
0 |
13 |
if (hl.type == MAGIC_NUMERIC) { |
|
2405
|
0 |
0 |
if (n <= 0 || nh->size == 0) XSRETURN_EMPTY; |
|
|
0 |
0 |
if (n <= 0 || nh->size == 0) XSRETURN_EMPTY; |
|
2406
|
0 |
0 |
if (n > nh->size) n = nh->size; |
|
2408
|
0 |
0 |
Newx(saved, nh->size, NV); |
|
2409
|
0 |
0 |
Copy(nh->data, saved, nh->size, NV); |
|
2412
|
0 |
0 |
EXTEND(SP, n); |
|
|
0 |
0 |
EXTEND(SP, n); |
|
2413
|
0 |
0 |
for (i = 0; i < n; i++) { |
|
2416
|
0 |
0 |
if (nh->size > 0) { |
|
2418
|
0 |
0 |
if (nh->type == HEAP_MIN) |
|
2427
|
0 |
0 |
Copy(saved, nh->data, saved_size, NV); |
|
2439
|
11 |
2 |
if (n <= 0 || h->size == 0) XSRETURN_EMPTY; |
|
|
1 |
10 |
if (n <= 0 || h->size == 0) XSRETURN_EMPTY; |
|
2440
|
1 |
9 |
if (n > h->size) n = h->size; |
|
2442
|
0 |
10 |
Newx(saved_data, h->size, SV*); |
|
2443
|
0 |
10 |
Newx(saved_pri, h->size, NV); |
|
2444
|
0 |
10 |
Copy(h->data, saved_data, h->size, SV*); |
|
2445
|
0 |
10 |
Copy(h->priorities, saved_pri, h->size, NV); |
|
2448
|
10 |
0 |
EXTEND(SP, n); |
|
|
0 |
10 |
EXTEND(SP, n); |
|
2449
|
28 |
10 |
for (i = 0; i < n; i++) { |
|
2452
|
26 |
2 |
if (h->size > 0) { |
|
2460
|
0 |
10 |
Copy(saved_data, h->data, saved_size, SV*); |
|
2461
|
0 |
10 |
Copy(saved_pri, h->priorities, saved_size, NV); |
|
2476
|
0 |
12 |
if (items != 2) croak("Usage: $heap->search(sub { ... })"); |
|
2481
|
10 |
2 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
0 |
10 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
2484
|
0 |
10 |
if (hl.type == MAGIC_NUMERIC) { |
|
2488
|
0 |
0 |
if (nh->size == 0) XSRETURN_EMPTY; |
|
2490
|
0 |
0 |
Newx(results, nh->size, NV); |
|
2492
|
0 |
0 |
for (i = 0; i < nh->size; i++) { |
|
2502
|
0 |
0 |
PUSHMARK(SP); |
|
2503
|
0 |
0 |
XPUSHs(elem); |
|
2508
|
0 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
2509
|
0 |
0 |
if (count > 0) POPs; |
|
2511
|
0 |
0 |
FREETMPS; LEAVE; |
|
2513
|
0 |
0 |
if (result) { |
|
2518
|
0 |
0 |
EXTEND(SP, found); |
|
|
0 |
0 |
EXTEND(SP, found); |
|
2519
|
0 |
0 |
for (i = 0; i < found; i++) { |
|
2530
|
1 |
9 |
if (h->size == 0) XSRETURN_EMPTY; |
|
2532
|
0 |
9 |
Newx(results, h->size, SV*); |
|
2534
|
39 |
9 |
for (i = 0; i < h->size; i++) { |
|
2543
|
0 |
39 |
PUSHMARK(SP); |
|
2544
|
0 |
39 |
XPUSHs(h->data[i]); |
|
2549
|
39 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
2550
|
39 |
0 |
if (count > 0) POPs; |
|
2552
|
39 |
0 |
FREETMPS; LEAVE; |
|
2554
|
18 |
21 |
if (result) { |
|
2559
|
9 |
0 |
EXTEND(SP, found); |
|
|
0 |
9 |
EXTEND(SP, found); |
|
2560
|
18 |
9 |
for (i = 0; i < found; i++) { |
|
2575
|
0 |
10 |
if (items != 2) croak("Usage: $heap->delete(sub { ... })"); |
|
2580
|
9 |
1 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
|
0 |
9 |
if (!SvROK(callback) || SvTYPE(SvRV(callback)) != SVt_PVCV) |
|
2583
|
0 |
9 |
if (hl.type == MAGIC_NUMERIC) { |
|
2586
|
0 |
0 |
for (i = 0; i < nh->size; i++) { |
|
2596
|
0 |
0 |
PUSHMARK(SP); |
|
2597
|
0 |
0 |
XPUSHs(elem); |
|
2602
|
0 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
2603
|
0 |
0 |
if (count > 0) POPs; |
|
2605
|
0 |
0 |
FREETMPS; LEAVE; |
|
2607
|
0 |
0 |
if (result) { |
|
2610
|
0 |
0 |
if (write_pos != i) { |
|
2619
|
0 |
0 |
if (deleted > 0 && nh->size > 1) { |
|
|
0 |
0 |
if (deleted > 0 && nh->size > 1) { |
|
2621
|
0 |
0 |
for (j = (nh->size >> 1) - 1; j >= 0; j--) { |
|
2622
|
0 |
0 |
if (nh->type == HEAP_MIN) |
|
2635
|
46 |
9 |
for (i = 0; i < h->size; i++) { |
|
2644
|
0 |
46 |
PUSHMARK(SP); |
|
2645
|
0 |
46 |
XPUSHs(h->data[i]); |
|
2650
|
46 |
0 |
result = count > 0 ? SvTRUE(TOPs) : 0; |
|
2651
|
46 |
0 |
if (count > 0) POPs; |
|
2653
|
46 |
0 |
FREETMPS; LEAVE; |
|
2655
|
18 |
28 |
if (result) { |
|
2659
|
15 |
13 |
if (write_pos != i) { |
|
2669
|
7 |
2 |
if (deleted > 0 && h->size > 1) { |
|
|
6 |
1 |
if (deleted > 0 && h->size > 1) { |
|
2671
|
11 |
6 |
for (j = (h->size >> 1) - 1; j >= 0; j--) { |
|
2712
|
21 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
21 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
21 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
0 |
21 |
pkg = CopSTASHPV(PL_curcop); |
|
|
0 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
21 |
0 |
pkg = CopSTASHPV(PL_curcop); |
|
|
0 |
21 |
pkg = CopSTASHPV(PL_curcop); |
|
2714
|
5 |
21 |
for (i = 1; i < items; i++) { |
|
2717
|
4 |
1 |
if (len == 6 && strEQ(arg, "import")) { |
|
|
4 |
0 |
if (len == 6 && strEQ(arg, "import")) { |
|
2719
|
1 |
0 |
} else if (len == 3 && strEQ(arg, "raw")) { |
|
|
1 |
0 |
} else if (len == 3 && strEQ(arg, "raw")) { |
|
2724
|
4 |
17 |
if (want_import) { |
|
2737
|
1 |
20 |
if (want_raw) { |