Skip to content

Commit 0722210

Browse files
author
maxtremblay
committed
add dense vector iterator
1 parent 8ad6cb1 commit 0722210

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "sparse-bin-mat"
3-
version = "0.6.0"
3+
version = "0.6.1"
44
authors = ["maxtremblay <maxtremblay>"]
55
edition = "2018"
66
description = "A sparse implementation of a binary matrix optimized for row operations"

src/vector/mod.rs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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)]
462505
mod test {
463506
use super::*;

0 commit comments

Comments
 (0)