From b2a52bfb3763fc3d82f2d8c707b89e14ee4ecabb Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Sat, 23 May 2026 13:06:07 +0200 Subject: [PATCH] perf: optimize chunk_start for single-block indexing Bypasses bitwise shift and mask operations when `block_bits == 0`, directly indexing `self.block_offsets[i]` instead. This eliminates unnecessary arithmetic overhead for single-block cases while preserving the original block-based offset calculation for larger block sizes. --- src/obiskio/src/unitig_index.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/obiskio/src/unitig_index.rs b/src/obiskio/src/unitig_index.rs index eb3fa40..53bdaa5 100644 --- a/src/obiskio/src/unitig_index.rs +++ b/src/obiskio/src/unitig_index.rs @@ -271,6 +271,9 @@ impl UnitigFileReader { fn chunk_start(&self, i: usize) -> usize { assert!(!self.block_offsets.is_empty(), "random access requires UnitigFileReader::open(); use open_sequential() for iteration only"); + if self.block_bits == 0 { + return self.block_offsets[i] as usize; + } let block = i >> self.block_bits; let rem = i & self.mask; let mut offset = self.block_offsets[block] as usize;