@@ -234,6 +234,28 @@ impl<T: Deref<Target = [usize]>> SparseBinVecBase<T> {
234234 }
235235 }
236236
237+ /// Returns an iterator over all value in the vector.
238+ ///
239+ /// # Example
240+ ///
241+ /// ```
242+ /// # use sparse_bin_mat::{SparseBinVec, BinNum};
243+ /// let vector = SparseBinVec::new(4, vec![0, 2]);
244+ /// let mut iter = vector.iter_dense();
245+ ///
246+ /// assert_eq!(iter.next(), Some(BinNum::one()));
247+ /// assert_eq!(iter.next(), Some(BinNum::zero()));
248+ /// assert_eq!(iter.next(), Some(BinNum::one()));
249+ /// assert_eq!(iter.next(), Some(BinNum::zero()));
250+ /// assert_eq!(iter.next(), None);
251+ /// ```
252+ pub fn iter_dense < ' a > ( & ' a self ) -> IterDense < ' a , T > {
253+ IterDense {
254+ vec : self ,
255+ index : 0 ,
256+ }
257+ }
258+
237259 /// Returns the concatenation of two vectors.
238260 ///
239261 /// # Example
@@ -458,6 +480,27 @@ impl<'vec> Iterator for NonTrivialPositions<'vec> {
458480 }
459481}
460482
483+ /// An iterator over all positions of
484+ /// a sparse binary vector.
485+ #[ derive( Debug , Clone ) ]
486+ pub struct IterDense < ' vec , T > {
487+ vec : & ' vec SparseBinVecBase < T > ,
488+ index : usize ,
489+ }
490+
491+ impl < ' vec , T > Iterator for IterDense < ' vec , T >
492+ where
493+ T : Deref < Target = [ usize ] > ,
494+ {
495+ type Item = BinNum ;
496+
497+ fn next ( & mut self ) -> Option < Self :: Item > {
498+ let value = self . vec . get ( self . index ) ;
499+ self . index += 1 ;
500+ value
501+ }
502+ }
503+
461504#[ cfg( test) ]
462505mod test {
463506 use super :: * ;
0 commit comments