Skip to content

Commit c6d8759

Browse files
committed
Move the estimate code out of the bisect logic to avoid distraction.
1 parent 64946b4 commit c6d8759

File tree

1 file changed

+8
-14
lines changed

1 file changed

+8
-14
lines changed

Diff for: src/least_satisfying.rs

+8-14
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@ where
77
P: FnMut(&T, usize, usize) -> Satisfies,
88
{
99
let mut cache = BTreeMap::new();
10-
let mut predicate = |idx: usize, remaining, estimate| {
10+
let mut predicate = |idx: usize, rm_no, lm_yes| {
11+
let range = lm_yes - rm_no + 1;
12+
// FIXME: This does not consider unknown_ranges.
13+
let remaining = range / 2;
14+
let estimate = estimate_steps(range);
1115
*cache
1216
.entry(idx)
1317
.or_insert_with(|| predicate(&slice[idx], remaining, estimate))
@@ -44,11 +48,7 @@ where
4448
}
4549
}
4650

47-
let mut range = lm_yes - rm_no + 1;
48-
// FIXME: This does not consider unknown_ranges.
49-
let mut remaining = range / 2;
50-
let estimate = estimate_steps(range);
51-
let r = predicate(next, remaining, estimate);
51+
let r = predicate(next, rm_no, lm_yes);
5252
match r {
5353
Satisfies::Yes => {
5454
lm_yes = next;
@@ -60,20 +60,14 @@ where
6060
}
6161
Satisfies::Unknown => {
6262
let mut left = next;
63-
while left > 0
64-
&& predicate(left, remaining, estimate_steps(range)) == Satisfies::Unknown
65-
{
63+
while left > 0 && predicate(left, rm_no, lm_yes) == Satisfies::Unknown {
6664
left -= 1;
67-
remaining = remaining.saturating_sub(1);
68-
range = range.saturating_sub(1);
6965
}
7066
let mut right = next;
7167
while right + 1 < slice.len()
72-
&& predicate(right, remaining, estimate_steps(range)) == Satisfies::Unknown
68+
&& predicate(right, rm_no, lm_yes) == Satisfies::Unknown
7369
{
7470
right += 1;
75-
remaining = remaining.saturating_sub(1);
76-
range = range.saturating_sub(1);
7771
}
7872
unknown_ranges.push((left + 1, right - 1));
7973
next = left;

0 commit comments

Comments
 (0)