#[derive(Debug, Clone, Copy, Default, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct VerticalLine<T> {
pub main: Option<T>,
pub intersection: Option<T>,
pub top: Option<T>,
pub bottom: Option<T>,
}
impl<T> VerticalLine<T> {
pub const fn new(
main: Option<T>,
intersection: Option<T>,
top: Option<T>,
bottom: Option<T>,
) -> Self {
Self {
main,
intersection,
top,
bottom,
}
}
pub const fn full(main: T, intersection: T, left: T, right: T) -> Self {
Self::new(Some(main), Some(intersection), Some(left), Some(right))
}
pub const fn filled(val: T) -> Self
where
T: Copy,
{
Self {
main: Some(val),
intersection: Some(val),
top: Some(val),
bottom: Some(val),
}
}
pub const fn empty() -> Self {
Self::new(None, None, None, None)
}
pub const fn is_empty(&self) -> bool {
self.main.is_none()
&& self.intersection.is_none()
&& self.top.is_none()
&& self.bottom.is_none()
}
}