cross: OffsetDimSlice: impl indices()
enumeration
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
use core::ops::{Index, IndexMut};
|
||||
|
||||
use crate::dim::DimSlice;
|
||||
use crate::dim::{DimIter, DimSlice};
|
||||
use crate::vec::Vec3u;
|
||||
|
||||
|
||||
@@ -13,6 +13,9 @@ impl<T> OffsetDimSlice<T> {
|
||||
pub fn new(offset: Vec3u, dim: Vec3u, items: T) -> Self {
|
||||
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>
|
||||
@@ -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)]
|
||||
mod test {
|
||||
use super::*;
|
||||
@@ -87,7 +110,7 @@ mod test {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dim_slice_into_iter() {
|
||||
fn offset_dim_slice_into_iter() {
|
||||
let data = [1, 2, 3, 4];
|
||||
let s = OffsetDimSlice::new(Vec3u::new(1, 2, 3), Vec3u::new(2, 1, 2), &data);
|
||||
let mut i = s.into_iter();
|
||||
@@ -99,7 +122,7 @@ mod test {
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn dim_slice_into_iter_mut() {
|
||||
fn offset_dim_slice_into_iter_mut() {
|
||||
let mut data = [1, 2, 3, 4];
|
||||
let s = OffsetDimSlice::new(Vec3u::new(1, 2, 3), Vec3u::new(2, 1, 2), &mut data);
|
||||
let mut i = s.into_iter();
|
||||
@@ -111,4 +134,16 @@ mod test {
|
||||
|
||||
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