pub mod butt;
pub mod round;
pub mod square;
use crate::geom::{ellipse, quad, Point2};
use crate::math::BaseFloat;
#[derive(Clone, Debug)]
pub enum Vertices<S> {
Butt,
Round(ellipse::Circumference<S>),
Square(quad::Vertices<Point2<S>>),
}
impl<S> Iterator for Vertices<S>
where
S: BaseFloat,
{
type Item = Point2<S>;
fn next(&mut self) -> Option<Self::Item> {
match *self {
Vertices::Butt => None,
Vertices::Round(ref mut iter) => iter.next(),
Vertices::Square(ref mut iter) => iter.next(),
}
}
fn size_hint(&self) -> (usize, Option<usize>) {
let len = self.len();
(len, Some(len))
}
}
impl<S> ExactSizeIterator for Vertices<S>
where
S: BaseFloat,
{
fn len(&self) -> usize {
match *self {
Vertices::Butt => 0,
Vertices::Round(ref iter) => iter.len(),
Vertices::Square(ref iter) => iter.len(),
}
}
}