(&mut self, prev: i64, next: i64)
| 112 | |
| 113 | impl StrideEstimator { |
| 114 | fn update(&mut self, prev: i64, next: i64) { |
| 115 | if prev == next { |
| 116 | return; |
| 117 | } |
| 118 | |
| 119 | let prev_stride = match self.stride { |
| 120 | Some(stride) => stride, |
| 121 | None => return self.start_stride(prev, next), |
| 122 | }; |
| 123 | |
| 124 | if prev_stride == next.wrapping_sub(prev) { |
| 125 | self.stride_count += 1; |
| 126 | // Keep track of the furthest away we have reached from the current stride. |
| 127 | self.end = match prev_stride > 0 { |
| 128 | true => self.end.max(next), |
| 129 | false => self.end.min(next), |
| 130 | }; |
| 131 | return; |
| 132 | } |
| 133 | |
| 134 | if next == self.start { |
| 135 | // We returned to the start of the stride. |
| 136 | return; |
| 137 | } |
| 138 | |
| 139 | // Stride does not match, update the best stride and reset. |
| 140 | self.finalize_stride(prev_stride); |
| 141 | self.start_stride(prev, next); |
| 142 | } |
| 143 | |
| 144 | fn finalize_stride(&mut self, prev_stride: i64) { |
| 145 | let new = Counter { start: self.start, stride: prev_stride, end: self.end }; |
no test coverage detected