Skip to content

Commit 712bfd6

Browse files
committed
Impl NdIndex<IxDyn> for &T and Vec<Ix>
1 parent a7d1fd6 commit 712bfd6

File tree

1 file changed

+20
-8
lines changed

1 file changed

+20
-8
lines changed

src/dimension/ndindex.rs

+20-8
Original file line numberDiff line numberDiff line change
@@ -219,22 +219,34 @@ impl<'a> IntoDimension for &'a [Ix] {
219219
}
220220
}
221221

222-
unsafe impl<'a> NdIndex<IxDyn> for &'a IxDyn {
222+
unsafe impl<'a> NdIndex<IxDyn> for &'a [Ix] {
223223
fn index_checked(&self, dim: &IxDyn, strides: &IxDyn) -> Option<isize> {
224-
(**self).index_checked(dim, strides)
224+
stride_offset_checked(dim.ix(), strides.ix(), *self)
225225
}
226226
fn index_unchecked(&self, strides: &IxDyn) -> isize {
227-
(**self).index_unchecked(strides)
227+
zip(strides.ix(), *self)
228+
.map(|(&s, &i)| stride_offset(i, s))
229+
.sum()
228230
}
229231
}
230232

231-
unsafe impl<'a> NdIndex<IxDyn> for &'a [Ix] {
233+
unsafe impl<'a, T> NdIndex<IxDyn> for &T
234+
where
235+
T: NdIndex<IxDyn>,
236+
{
232237
fn index_checked(&self, dim: &IxDyn, strides: &IxDyn) -> Option<isize> {
233-
stride_offset_checked(dim.ix(), strides.ix(), *self)
238+
(*self).index_checked(dim, strides)
234239
}
235240
fn index_unchecked(&self, strides: &IxDyn) -> isize {
236-
zip(strides.ix(), *self)
237-
.map(|(&s, &i)| stride_offset(i, s))
238-
.sum()
241+
(*self).index_unchecked(strides)
242+
}
243+
}
244+
245+
unsafe impl<'a> NdIndex<IxDyn> for Vec<Ix> {
246+
fn index_checked(&self, dim: &IxDyn, strides: &IxDyn) -> Option<isize> {
247+
(&**self).index_checked(dim, strides)
248+
}
249+
fn index_unchecked(&self, strides: &IxDyn) -> isize {
250+
(&**self).index_unchecked(strides)
239251
}
240252
}

0 commit comments

Comments
 (0)