| ... | ... | @@ -678,18 +678,23 @@ pub fn partitionPoint( |
| 678 | 678 | context: anytype, |
| 679 | 679 | comptime predicate: fn (@TypeOf(context), T) bool, |
| 680 | 680 | ) usize { |
| 681 | | var low: usize = 0; |
| 682 | | var high: usize = items.len; |
| 681 | var it: usize = 0; |
| 682 | var len: usize = items.len; |
| 683 | 683 | |
| 684 | | while (low < high) { |
| 685 | | const mid = low + (high - low) / 2; |
| 686 | | if (predicate(context, items[mid])) { |
| 687 | | low = mid + 1; |
| 688 | | } else { |
| 689 | | high = mid; |
| 684 | while (len > 1) { |
| 685 | const half: usize = len / 2; |
| 686 | len -= half; |
| 687 | if (predicate(context, items[it + half - 1])) { |
| 688 | @branchHint(.unpredictable); |
| 689 | it += half; |
| 690 | 690 | } |
| 691 | 691 | } |
| 692 | | return low; |
| 692 | |
| 693 | if (it < items.len) { |
| 694 | it += @intFromBool(predicate(context, items[it])); |
| 695 | } |
| 696 | |
| 697 | return it; |
| 693 | 698 | } |
| 694 | 699 | |
| 695 | 700 | test partitionPoint { |