Skip to content

Commit 4a34572

Browse files
committed
FEAT: Use izip!() instead of zipsl and zip_cons
Enough with the strange hacks
1 parent f2c3c48 commit 4a34572

File tree

4 files changed

+6
-39
lines changed

4 files changed

+6
-39
lines changed

src/dimension/dimension_trait.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ use {Ix, Ixs, Ix0, Ix1, Ix2, Ix3, Ix4, Ix5, Ix6, IxDyn, Dim, Si, IxDynImpl};
1717
use IntoDimension;
1818
use RemoveAxis;
1919
use {ArrayView1, ArrayViewMut1};
20-
use {zipsl, zipsl_mut, ZipExt};
2120
use Axis;
2221
use super::{
2322
stride_offset,
@@ -217,7 +216,7 @@ pub trait Dimension : Clone + Eq + Debug + Send + Sync + Default +
217216
/// Return stride offset for index.
218217
fn stride_offset(index: &Self, strides: &Self) -> isize {
219218
let mut offset = 0;
220-
for (&i, &s) in zipsl(index.slice(), strides.slice()) {
219+
for (&i, &s) in izip!(index.slice(), strides.slice()) {
221220
offset += stride_offset(i, s);
222221
}
223222
offset
@@ -251,8 +250,7 @@ pub trait Dimension : Clone + Eq + Debug + Send + Sync + Default +
251250
ndassert!(slices.len() == dim.slice().len(),
252251
"SliceArg {:?}'s length does not match dimension {:?}",
253252
slices, dim);
254-
for (dr, sr, &slc) in zipsl_mut(dim.slice_mut(), strides.slice_mut()).zip_cons(slices)
255-
{
253+
for (dr, sr, &slc) in izip!(dim.slice_mut(), strides.slice_mut(), slices) {
256254
let m = *dr;
257255
let mi = m as Ixs;
258256
let Si(b1, opt_e1, s1) = slc;

src/dimension/mod.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
use {Ix, Ixs};
1010
use error::{from_kind, ErrorKind, ShapeError};
11-
use {zipsl, ZipExt};
1211

1312
pub use self::dim::*;
1413
pub use self::axis::Axis;
@@ -117,7 +116,7 @@ fn stride_offset_checked_arithmetic<D>(dim: &D, strides: &D, index: &D)
117116
where D: Dimension
118117
{
119118
let mut offset = 0;
120-
for (&d, &i, &s) in zipsl(dim.slice(), index.slice()).zip_cons(strides.slice()) {
119+
for (&d, &i, &s) in izip!(dim.slice(), index.slice(), strides.slice()) {
121120
if i >= d {
122121
return None;
123122
}
@@ -140,8 +139,7 @@ pub fn stride_offset_checked(dim: &[Ix], strides: &[Ix], index: &[Ix]) -> Option
140139
return None;
141140
}
142141
let mut offset = 0;
143-
for (&d, &i, &s) in zipsl(dim, index).zip_cons(strides)
144-
{
142+
for (&d, &i, &s) in izip!(dim, index, strides) {
145143
if i >= d {
146144
return None;
147145
}

src/impl_methods.rs

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ use arraytraits;
1818
use dimension;
1919
use iterators;
2020
use error::{self, ShapeError, ErrorKind};
21-
use super::zipsl;
22-
use super::ZipExt;
2321
use dimension::IntoDimension;
2422
use dimension::{axes_of, Axes, merge_axes, stride_offset};
2523
use iterators::{
@@ -874,9 +872,7 @@ impl<A, S, D> ArrayBase<S, D> where S: Data<Elem=A>, D: Dimension
874872
}
875873
if dim.ndim() == 1 { return false; }
876874
// check all dimensions -- a dimension of length 1 can have unequal strides
877-
for (&dim, &s, &ds) in zipsl(dim.slice(), strides.slice())
878-
.zip_cons(defaults.slice())
879-
{
875+
for (&dim, &s, &ds) in izip!(dim.slice(), strides.slice(), defaults.slice()) {
880876
if dim != 1 && s != ds {
881877
return false;
882878
}

src/lib.rs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -85,14 +85,12 @@ extern crate blas_sys;
8585

8686
extern crate matrixmultiply;
8787

88-
extern crate itertools;
88+
#[macro_use(izip)] extern crate itertools;
8989
extern crate num_traits as libnum;
9090
extern crate num_complex;
9191

92-
use std::iter::Zip as ZipIter;
9392
use std::marker::PhantomData;
9493
use std::rc::Rc;
95-
use std::slice::{Iter as SliceIter, IterMut as SliceIterMut};
9694

9795
pub use dimension::{
9896
Dimension,
@@ -816,29 +814,6 @@ pub use impl_ops::ScalarOperand;
816814
// Array view methods
817815
mod impl_views;
818816

819-
fn zipsl<'a, 'b, A, B>(t: &'a [A], u: &'b [B])
820-
-> ZipIter<SliceIter<'a, A>, SliceIter<'b, B>> {
821-
t.iter().zip(u)
822-
}
823-
fn zipsl_mut<'a, 'b, A, B>(t: &'a mut [A], u: &'b mut [B])
824-
-> ZipIter<SliceIterMut<'a, A>, SliceIterMut<'b, B>> {
825-
t.iter_mut().zip(u)
826-
}
827-
828-
use itertools::{cons_tuples, ConsTuples};
829-
830-
trait ZipExt : Iterator {
831-
fn zip_cons<J>(self, iter: J) -> ConsTuples<ZipIter<Self, J::IntoIter>, (Self::Item, J::Item)>
832-
where J: IntoIterator,
833-
Self: Sized,
834-
{
835-
cons_tuples(self.zip(iter))
836-
}
837-
}
838-
839-
impl<I> ZipExt for I where I: Iterator { }
840-
841-
842817
/// A contiguous array shape of n dimensions.
843818
///
844819
/// Either c- or f- memory ordered (*c* a.k.a *row major* is the default).

0 commit comments

Comments
 (0)