Skip to content

Commit 8150dfb

Browse files
make ambiguous EF optional in case no N values found
1 parent 00cb3e7 commit 8150dfb

1 file changed

Lines changed: 14 additions & 4 deletions

File tree

src/packed_ef_n_seq.rs

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{BitSeqVec, PackedNSeqVec, PackedSeqVec, SeqVec};
1010
#[cfg_attr(feature = "epserde", derive(epserde::Epserde))]
1111
pub struct PackedEfNSeqVec {
1212
seq: PackedSeqVec,
13-
ef_ambiguous: EliasFano,
13+
ef_ambiguous: Option<EliasFano>,
1414
}
1515

1616
impl PackedEfNSeqVec {
@@ -23,6 +23,14 @@ impl PackedEfNSeqVec {
2323
for byte in tail {
2424
cnt += byte.count_ones();
2525
}
26+
27+
if cnt == 0 {
28+
return Self {
29+
seq: n_seq.seq,
30+
ef_ambiguous: None,
31+
};
32+
}
33+
2634
let mut ef_builder = EliasFanoBuilder::new(cnt as usize, n_seq.seq.seq.len() as usize);
2735
let mut pos = 0;
2836
for mut byte in n_seq.ambiguous.seq {
@@ -35,13 +43,15 @@ impl PackedEfNSeqVec {
3543
}
3644
Self {
3745
seq: n_seq.seq,
38-
ef_ambiguous: ef_builder.build(),
46+
ef_ambiguous: Some(ef_builder.build()),
3947
}
4048
}
4149
pub fn into_packed_n_seq_vec(self) -> PackedNSeqVec {
4250
let mut ambiguous = BitSeqVec::with_len(self.seq.len());
43-
for pos in self.ef_ambiguous.iter() {
44-
ambiguous.seq[pos / 8] |= 1 << (pos % 8);
51+
if let Some(ef_ambiguous) = self.ef_ambiguous {
52+
for pos in ef_ambiguous.iter() {
53+
ambiguous.seq[pos / 8] |= 1 << (pos % 8);
54+
}
4555
}
4656
PackedNSeqVec {
4757
seq: self.seq,

0 commit comments

Comments
 (0)