use super::sampled_contour::*;
use smallvec::*;
use std::ops::{Range};
pub trait ColumnSampledContour : SampledContour {
fn intercepts_on_column(&self, x: f64) -> SmallVec<[Range<f64>; 4]>;
#[inline]
fn rounded_intercepts_on_column(&self, x: f64) -> SmallVec<[Range<usize>; 4]> {
let intercepts = self.intercepts_on_column(x)
.into_iter()
.map(|intercept| {
let min_y_ceil = intercept.start.ceil();
let max_y_ceil = intercept.end.ceil();
let min_y = min_y_ceil as usize;
let max_y = max_y_ceil as usize;
min_y..max_y
})
.filter(|intercept| intercept.start != intercept.end)
.collect::<SmallVec<_>>();
if intercepts.len() <= 1 {
intercepts
} else {
merge_overlapping_intercepts(intercepts)
}
}
}
impl<'a, T> ColumnSampledContour for &'a T
where
T: ColumnSampledContour,
{
#[inline] fn intercepts_on_column(&self, x: f64) -> SmallVec<[Range<f64>; 4]> { (*self).intercepts_on_column(x) }
}