1use std::cmp::Ordering;
2
3pub mod analysis;
4pub mod ascii;
5pub mod binary;
6
7#[cfg(test)]
8mod tests;
9
10pub type Result<T> = anyhow::Result<T>;
11
12extern crate pest;
13#[macro_use]
14extern crate pest_derive;
15
16pub(crate) fn bin_search_before(data: &[f64], target: f64) -> Option<usize> {
17 if data.is_empty() {
18 return None;
19 }
20
21 let mut ans = None;
22 let mut lo = 0usize;
23 let mut hi = data.len() - 1;
24 let mut x;
25 while lo < hi {
26 let mid = (lo + hi) / 2;
27 x = data[mid];
28 match target.total_cmp(&x) {
29 Ordering::Less => hi = mid - 1,
30 Ordering::Greater => {
31 lo = mid + 1;
32 ans = Some(mid)
33 }
34 Ordering::Equal => return Some(mid),
35 }
36 }
37
38 ans
39}