psfparser/
lib.rs

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}