Expose finding of bin for given sample

This commit is contained in:
Vinzent Steinberg 2018-03-06 19:31:09 +01:00
parent 682fec27fe
commit 2775f78e8e

View File

@ -79,25 +79,37 @@ macro_rules! define_histogram {
})
}
/// Find the index of the bin corresponding to the given sample.
///
/// Fails if the sample is out of range of the histogram.
#[inline]
pub fn find(&self, x: f64) -> Result<usize, ()> {
// We made sure our ranges are valid at construction, so we can
// safely unwrap.
match self.range.binary_search_by(|p| p.partial_cmp(&x).unwrap()) {
Ok(i) if i < LEN => {
Ok(i)
},
Err(i) if i > 0 && i < LEN + 1 => {
Ok(i - 1)
},
_ => {
Err(())
},
}
}
/// Add a sample to the histogram.
///
/// Fails if the sample is out of range of the histogram.
#[inline]
pub fn add(&mut self, x: f64) -> Result<(), ()> {
// We made sure our ranges are valid at construction, so we can
// safely unwrap.
match self.range.binary_search_by(|p| p.partial_cmp(&x).unwrap()) {
Ok(i) if i < LEN => {
self.bin[i] += 1;
},
Err(i) if i > 0 && i < LEN + 1 => {
self.bin[i - 1] += 1;
},
_ => {
return Err(());
},
if let Ok(i) = self.find(x) {
self.bin[i] += 1;
Ok(())
} else {
Err(())
}
Ok(())
}
/// Return the ranges of the histogram.