refactor: replace explicit collect with Unitig::from_nucleotides
Introduce a thread-local buffer to materialize nucleotide iterators into contiguous slices. Update `try_for_each_unitig` across the debruijn, index, merge, and rebuild layers to directly instantiate `Unitig` via `from_nucleotides()` instead of explicitly collecting iterators. This eliminates intermediate allocations and aligns test code with the new approach.
This commit is contained in:
@@ -107,9 +107,8 @@ impl KmerPartition {
|
||||
fs::create_dir_all(&layer_dir)?;
|
||||
|
||||
let mut uw = Layer::<()>::unitig_writer(&layer_dir).map_err(olm_to_sk)?;
|
||||
g.try_for_each_unitig(|nuc_iter| {
|
||||
let unitig: obikseq::unitig::Unitig = nuc_iter.collect();
|
||||
uw.write(&unitig)
|
||||
g.try_for_each_unitig(|nucs| {
|
||||
uw.write(&obikseq::unitig::Unitig::from_nucleotides(nucs))
|
||||
})?;
|
||||
uw.close()?;
|
||||
|
||||
|
||||
@@ -307,9 +307,8 @@ impl KmerPartition {
|
||||
g.compute_degrees_and_mark_starts();
|
||||
fs::create_dir_all(&new_layer_dir)?;
|
||||
let mut uw = Layer::<()>::unitig_writer(&new_layer_dir).map_err(olm_to_sk)?;
|
||||
g.try_for_each_unitig(|nuc_iter| {
|
||||
let unitig: obikseq::unitig::Unitig = nuc_iter.collect();
|
||||
uw.write(&unitig)
|
||||
g.try_for_each_unitig(|nucs| {
|
||||
uw.write(&obikseq::unitig::Unitig::from_nucleotides(nucs))
|
||||
})?;
|
||||
uw.close()?;
|
||||
let n = g.len();
|
||||
|
||||
@@ -168,9 +168,8 @@ impl KmerPartition {
|
||||
fs::create_dir_all(&dst_layer_dir)?;
|
||||
|
||||
let mut uw = Layer::<()>::unitig_writer(&dst_layer_dir).map_err(olm_to_sk)?;
|
||||
g.try_for_each_unitig(|nuc_iter| {
|
||||
let unitig: obikseq::unitig::Unitig = nuc_iter.collect();
|
||||
uw.write(&unitig)
|
||||
g.try_for_each_unitig(|nucs| {
|
||||
uw.write(&obikseq::unitig::Unitig::from_nucleotides(nucs))
|
||||
})?;
|
||||
uw.close()?;
|
||||
drop(g);
|
||||
|
||||
Reference in New Issue
Block a user