fast image operations
Diffstat (limited to 'src/span.rs')
| -rw-r--r-- | src/span.rs | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/span.rs b/src/span.rs new file mode 100644 index 0000000..7ac76c9 --- /dev/null +++ b/src/span.rs @@ -0,0 +1,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) + } +} |