cross: OffsetDimSlice: impl indices()
enumeration
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
use core::ops::{Index, IndexMut};
|
use core::ops::{Index, IndexMut};
|
||||||
|
|
||||||
use crate::dim::DimSlice;
|
use crate::dim::{DimIter, DimSlice};
|
||||||
use crate::vec::Vec3u;
|
use crate::vec::Vec3u;
|
||||||
|
|
||||||
|
|
||||||
@@ -13,6 +13,9 @@ impl<T> OffsetDimSlice<T> {
|
|||||||
pub fn new(offset: Vec3u, dim: Vec3u, items: T) -> Self {
|
pub fn new(offset: Vec3u, dim: Vec3u, items: T) -> Self {
|
||||||
Self { offset, inner: DimSlice::new(dim, items) }
|
Self { offset, inner: DimSlice::new(dim, items) }
|
||||||
}
|
}
|
||||||
|
pub fn indices(&self) -> OffsetDimIter {
|
||||||
|
OffsetDimIter::new(self.offset, self.inner.indices())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Index<Vec3u> for OffsetDimSlice<T>
|
impl<T> Index<Vec3u> for OffsetDimSlice<T>
|
||||||
@@ -43,6 +46,26 @@ impl<T: IntoIterator> IntoIterator for OffsetDimSlice<T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub struct OffsetDimIter {
|
||||||
|
offset: Vec3u,
|
||||||
|
inner: DimIter,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl OffsetDimIter {
|
||||||
|
fn new(offset: Vec3u, inner: DimIter) -> Self {
|
||||||
|
Self { offset, inner }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "iter")]
|
||||||
|
impl Iterator for OffsetDimIter {
|
||||||
|
type Item = Vec3u;
|
||||||
|
fn next(&mut self) -> Option<Self::Item> {
|
||||||
|
self.inner.next().map(|i| i + self.offset)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
@@ -87,7 +110,7 @@ mod test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn dim_slice_into_iter() {
|
fn offset_dim_slice_into_iter() {
|
||||||
let data = [1, 2, 3, 4];
|
let data = [1, 2, 3, 4];
|
||||||
let s = OffsetDimSlice::new(Vec3u::new(1, 2, 3), Vec3u::new(2, 1, 2), &data);
|
let s = OffsetDimSlice::new(Vec3u::new(1, 2, 3), Vec3u::new(2, 1, 2), &data);
|
||||||
let mut i = s.into_iter();
|
let mut i = s.into_iter();
|
||||||
@@ -99,7 +122,7 @@ mod test {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn dim_slice_into_iter_mut() {
|
fn offset_dim_slice_into_iter_mut() {
|
||||||
let mut data = [1, 2, 3, 4];
|
let mut data = [1, 2, 3, 4];
|
||||||
let s = OffsetDimSlice::new(Vec3u::new(1, 2, 3), Vec3u::new(2, 1, 2), &mut data);
|
let s = OffsetDimSlice::new(Vec3u::new(1, 2, 3), Vec3u::new(2, 1, 2), &mut data);
|
||||||
let mut i = s.into_iter();
|
let mut i = s.into_iter();
|
||||||
@@ -111,4 +134,16 @@ mod test {
|
|||||||
|
|
||||||
assert_eq!(data, [10,2,30,4]);
|
assert_eq!(data, [10,2,30,4]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn offset_dim_slice_indices() {
|
||||||
|
let s = OffsetDimSlice::new(Vec3u::new(10, 20, 30), Vec3u::new(2, 1, 2), &[()]);
|
||||||
|
let mut i = s.indices();
|
||||||
|
assert_eq!(i.next().unwrap(), Vec3u::new(10, 20, 30));
|
||||||
|
assert_eq!(i.next().unwrap(), Vec3u::new(11, 20, 30));
|
||||||
|
assert_eq!(i.next().unwrap(), Vec3u::new(10, 20, 31));
|
||||||
|
assert_eq!(i.next().unwrap(), Vec3u::new(11, 20, 31));
|
||||||
|
assert_eq!(i.next(), None);
|
||||||
|
assert_eq!(i.next(), None);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user