refactor: replace explicit bit-setting loops with optimized bulk operations
Refactor bitmatrix, colgroup, and layer modules to replace manual iteration with concise `or_where` predicates and bulk inversion calls. This simplifies the codebase and leverages optimized internal implementations for improved performance.
This commit is contained in:
@@ -412,13 +412,7 @@ impl PersistentBitMatrixBuilder {
|
||||
let path = col_path(&self.dir, self.n_cols);
|
||||
self.n_cols += 1;
|
||||
let mut b = PersistentBitVecBuilder::new(self.n, &path)?;
|
||||
let view = src.view();
|
||||
for slot in 0..self.n {
|
||||
if view.primary_bytes()[slot] > 0 { b.set(slot, true); }
|
||||
}
|
||||
for (slot, _) in view.overflow_entries() {
|
||||
b.set(slot, true);
|
||||
}
|
||||
b.or_where(src.view(), |v| v > 0);
|
||||
b.close()
|
||||
}
|
||||
|
||||
|
||||
@@ -53,9 +53,7 @@ pub trait MatrixGroupOps {
|
||||
let n = counts.len();
|
||||
let n_required = g.indices.len() as u32;
|
||||
let mut b = TempBitVecBuilder::new(n)?;
|
||||
for slot in 0..n {
|
||||
if counts.get(slot) >= n_required { b.set(slot, true); }
|
||||
}
|
||||
b.or_where(counts.view(), |v| v >= n_required);
|
||||
b.freeze()
|
||||
}
|
||||
|
||||
@@ -64,9 +62,7 @@ pub trait MatrixGroupOps {
|
||||
let counts = self.partial_group_presence_count(g, threshold)?;
|
||||
let n = counts.len();
|
||||
let mut b = TempBitVecBuilder::new(n)?;
|
||||
for slot in 0..n {
|
||||
if counts.get(slot) == 0 { b.set(slot, true); }
|
||||
}
|
||||
b.or_where(counts.view(), |v| v == 0);
|
||||
b.freeze()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -107,9 +107,7 @@ impl Layer<()> {
|
||||
fs::create_dir_all(&presence_dir).map_err(OLMError::Io)?;
|
||||
let mut mb = PersistentBitMatrixBuilder::new(n_kmers, &presence_dir).map_err(OLMError::Io)?;
|
||||
let mut col = mb.add_col().map_err(OLMError::Io)?;
|
||||
for slot in 0..n_kmers {
|
||||
col.set(slot, true);
|
||||
}
|
||||
col.not();
|
||||
col.close().map_err(OLMError::Io)?;
|
||||
mb.close().map_err(OLMError::Io)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user