From 9abb2db92fc453ddd87da19faadd527730591b8f Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Fri, 19 Jun 2026 09:20:14 +0200 Subject: [PATCH] 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. --- src/obicompactvec/src/bitmatrix.rs | 8 +------- src/obicompactvec/src/colgroup.rs | 8 ++------ src/obilayeredmap/src/layer.rs | 4 +--- 3 files changed, 4 insertions(+), 16 deletions(-) diff --git a/src/obicompactvec/src/bitmatrix.rs b/src/obicompactvec/src/bitmatrix.rs index 55a4561..c054ae0 100644 --- a/src/obicompactvec/src/bitmatrix.rs +++ b/src/obicompactvec/src/bitmatrix.rs @@ -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() } diff --git a/src/obicompactvec/src/colgroup.rs b/src/obicompactvec/src/colgroup.rs index b8c5ec8..b1545e6 100644 --- a/src/obicompactvec/src/colgroup.rs +++ b/src/obicompactvec/src/colgroup.rs @@ -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() } } diff --git a/src/obilayeredmap/src/layer.rs b/src/obilayeredmap/src/layer.rs index 72b38ea..241feea 100644 --- a/src/obilayeredmap/src/layer.rs +++ b/src/obilayeredmap/src/layer.rs @@ -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) }