devela/num/geom/metric/
region.rs1use crate::{Extent, Position, Stride};
7
8#[doc = crate::TAG_GEOM!()]
9#[must_use]
11#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
12pub struct Region<T, const D: usize> {
13 pub pos: Position<T, D>,
15 pub size: Extent<T, D>,
17}
18
19#[doc = crate::TAG_GEOM!()]
20#[must_use]
28#[derive(Clone, Copy, Debug, Default, PartialEq, Eq, PartialOrd, Ord, Hash)]
29pub struct RegionStrided<T, const D: usize> {
30 pub region: Region<T, D>,
32 pub stride: Stride<T, D>,
34}
35
36#[rustfmt::skip]
39impl<T, const D: usize> Region<T, D> {
40 pub const fn new(pos: Position<T, D>, size: Extent<T, D>) -> Self { Self { pos, size } }
42
43 pub fn position(&self) -> Position<T, D> where T: Clone { self.pos.clone() }
45 pub fn extent(&self) -> Extent<T, D> where T: Clone { self.size.clone() }
47}
48impl<T, const D: usize> From<(Position<T, D>, Extent<T, D>)> for Region<T, D> {
49 fn from(from: (Position<T, D>, Extent<T, D>)) -> Self {
50 Self::new(from.0, from.1)
51 }
52}
53impl<T, const D: usize> From<(Extent<T, D>, Position<T, D>)> for Region<T, D> {
54 fn from(from: (Extent<T, D>, Position<T, D>)) -> Self {
55 Self::new(from.1, from.0)
56 }
57}