1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
use crate::At; use std::ops::Range; mod sealer { #[doc(hidden)] pub trait Sealed {} } use sealer::Sealed; /// Trait for that which can be used to index a image. pub trait Span: Sealed { #[doc(hidden)] fn range<const C: usize>(self, i: (u32, u32)) -> Range<usize>; } impl Sealed for Range<usize> {} impl Span for Range<usize> { #[inline(always)] fn range<const C: usize>(self, _: (u32, u32)) -> Range<usize> { self } } impl Sealed for Range<(u32, u32)> {} impl Span for Range<(u32, u32)> { #[inline(always)] fn range<const C: usize>(self, i: (u32, u32)) -> Range<usize> { let Self { start: (sx, sy), end: (ex, ey), } = self; i.at::<C>(sx, sy)..i.at::<C>(ex, ey) } }