Branch Coverage

HeapPQ.c
Criterion Covered Total %
branch 615 1024 60.0


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) {