7
7
P : FnMut ( & T , usize , usize ) -> Satisfies ,
8
8
{
9
9
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) ;
11
15
* cache
12
16
. entry ( idx)
13
17
. or_insert_with ( || predicate ( & slice[ idx] , remaining, estimate) )
44
48
}
45
49
}
46
50
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) ;
52
52
match r {
53
53
Satisfies :: Yes => {
54
54
lm_yes = next;
@@ -60,20 +60,14 @@ where
60
60
}
61
61
Satisfies :: Unknown => {
62
62
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 {
66
64
left -= 1 ;
67
- remaining = remaining. saturating_sub ( 1 ) ;
68
- range = range. saturating_sub ( 1 ) ;
69
65
}
70
66
let mut right = next;
71
67
while right + 1 < slice. len ( )
72
- && predicate ( right, remaining , estimate_steps ( range ) ) == Satisfies :: Unknown
68
+ && predicate ( right, rm_no , lm_yes ) == Satisfies :: Unknown
73
69
{
74
70
right += 1 ;
75
- remaining = remaining. saturating_sub ( 1 ) ;
76
- range = range. saturating_sub ( 1 ) ;
77
71
}
78
72
unknown_ranges. push ( ( left + 1 , right - 1 ) ) ;
79
73
next = left;
0 commit comments