我正在空间网格上实现光标,例如,对于空间[2, 2]
,光标应该分别访问[0, 0]
、[1, 0]
、[0, 1]
、[1, 1]
.我有下面写的代码,但当我使用for cursor in SpaceCursor::<2>::new(&[2, 2])
时,我注意到光标不是借来的,而是复制的.由于游标将始终在SpaceCursor生命周期内,我想知道我是否可以使用它的类型&[i32; 2]
而不是[i32; 2]
?
struct SpaceCursor<const D: usize> {
cursor: [i32; D],
boundary: [usize; D],
}
impl<const D: usize> SpaceCursor<D> {
pub fn new(boundary: &[usize]) -> Self {
let mut result = SpaceCursor::<D> {
cursor: [0; D],
boundary: boundary.try_into().expect("Bad boundary"),
};
if D >= 1 {
result.cursor[0] = -1;
}
result
}
}
impl<const D: usize> Iterator for SpaceCursor<D> {
type Item = [i32; D];
fn next(&mut self) -> Option<Self::Item> {
let mut index = 0;
while index < D {
self.cursor[index] += 1;
if self.cursor[index] < self.boundary[index] as i32 {
break;
}
index += 1;
}
if index == D {
None
} else {
for i in 0..index {
self.cursor[i] = 0;
}
Some(self.cursor)
}
}
}