⬆️ refactor superkmer to use obipipeline

- Replace manual threading with Pipeline abstraction from `obipipline`
- Remove crossbeam-channel dependency and format detection logic
- Introduce typed `PipelineData` enum for pipeline stages (RawChunk, Norm Chunk, Batch)
- Implement shared normalization and extraction steps as `SharedFn`ƒ
  - Add unsafe Send/Sync impls for PipelineData (Rope ownership is moved, not shared)
- Replace manual reader/worker/output threads with a single Pipeline execution
  - Uses `make_source_fallible!`, shared transform functions, and a sink for output
- Simplify argument handling (remove `--format` flag)
  - Update Cargo.toml: remove crossbeam-channel, add obipipeline
This commit is contained in:
Eric Coissac
2026-04-24 18:14:00 +02:00
parent 75bf980046
commit f1c8fc85c9
10 changed files with 236 additions and 75 deletions
+2 -2
View File
@@ -156,7 +156,7 @@ mod tests {
use obikrope::Rope;
fn make_rope(data: &[u8]) -> Rope {
let mut r = Rope::new();
let mut r = Rope::new(None);
r.push(data.to_vec());
r
}
@@ -210,7 +210,7 @@ mod tests {
fn multi_slice_rope() {
let data = b"ACGTACGTACGT\x00";
let mid = data.len() / 2;
let mut rope = Rope::new();
let mut rope = Rope::new(None);
rope.push(data[..mid].to_vec());
rope.push(data[mid..].to_vec());
let out: Vec<Vec<u8>> = SuperKmerIter::new(&rope, 4, 2, 1, 0.0)