Skip to content

Commit cafa33b

Browse files
committed
Make more progress with integration
1 parent be7be91 commit cafa33b

File tree

3 files changed

+24
-40
lines changed

3 files changed

+24
-40
lines changed

flatgfa/src/file.rs

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
#![allow(clippy::repr_packed_without_abi)]
22

3-
use crate::packedseq::{PackedSeqView, PackedToc};
3+
use crate::flatgfa;
44
use crate::pool::{FixedStore, Pool, Span, Store};
5-
use crate::{flatgfa, packedseq};
65
use std::mem::{size_of, size_of_val};
76
use tinyvec::SliceVec;
87
use zerocopy::{AsBytes, FromBytes, FromZeroes};
@@ -19,7 +18,7 @@ pub struct Toc {
1918
paths: Size,
2019
links: Size,
2120
steps: Size,
22-
seq_data: usize,
21+
seq_data: Size,
2322
overlaps: Size,
2423
alignment: Size,
2524
name_data: Size,
@@ -71,7 +70,7 @@ impl Toc {
7170
+ self.paths.bytes::<flatgfa::Path>()
7271
+ self.links.bytes::<flatgfa::Link>()
7372
+ self.steps.bytes::<flatgfa::Handle>()
74-
+ PackedToc::size(&self)
73+
+ self.seq_data.bytes::<u8>()
7574
+ self.overlaps.bytes::<Span<flatgfa::AlignOp>>()
7675
+ self.alignment.bytes::<flatgfa::AlignOp>()
7776
+ self.name_data.bytes::<u8>()
@@ -123,7 +122,7 @@ impl Toc {
123122
paths: Size::empty(factor),
124123
links: Size::empty(32 * factor * factor),
125124
steps: Size::empty(1024 * factor * factor),
126-
seq_data: 512 * factor * factor,
125+
seq_data: Size::empty(512 * factor * factor),
127126
overlaps: Size::empty(256 * factor),
128127
alignment: Size::empty(64 * factor * factor),
129128
name_data: Size::empty(64 * factor),
@@ -149,7 +148,7 @@ impl Toc {
149148
paths: Size::empty(paths),
150149
links: Size::empty(links),
151150
steps: Size::empty(path_bytes / 3),
152-
seq_data: 0,
151+
seq_data: Size::empty(seg_bytes),
153152
overlaps: Size::empty((links + paths) * 2),
154153
alignment: Size::empty(links * 2 + paths * 4),
155154
name_data: Size::empty(paths * 512),
@@ -193,9 +192,7 @@ pub fn view(data: &[u8]) -> flatgfa::FlatGFA {
193192
let (paths, rest) = slice_prefix(rest, toc.paths);
194193
let (links, rest) = slice_prefix(rest, toc.links);
195194
let (steps, rest) = slice_prefix(rest, toc.steps);
196-
197-
let (seq_data, rest) = PackedSeqView::view_remaining(rest);
198-
195+
let (seq_data, rest) = slice_prefix(rest, toc.seq_data);
199196
let (overlaps, rest) = slice_prefix(rest, toc.overlaps);
200197
let (alignment, rest) = slice_prefix(rest, toc.alignment);
201198
let (name_data, rest) = slice_prefix(rest, toc.name_data);
@@ -300,7 +297,7 @@ pub fn dump(gfa: &flatgfa::FlatGFA, buf: &mut [u8]) {
300297
let rest = write_bump(rest, gfa.paths.all()).unwrap();
301298
let rest = write_bump(rest, gfa.links.all()).unwrap();
302299
let rest = write_bump(rest, gfa.steps.all()).unwrap();
303-
let rest = PackedSeqView::dump_remaining(&gfa.seq_data, rest);
300+
let rest = write_bytes(rest, gfa.seq_data.all()).unwrap();
304301
let rest = write_bump(rest, gfa.overlaps.all()).unwrap();
305302
let rest = write_bump(rest, gfa.alignment.all()).unwrap();
306303
let rest = write_bytes(rest, gfa.name_data.all()).unwrap();

flatgfa/src/flatgfa.rs

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ pub struct FlatGFA<'a> {
4343
/// TODO: This could certainly use a smaller representation than `u8`
4444
/// (since we care only about 4 base pairs). If we want to pay the cost
4545
/// of bit-packing.
46-
pub seq_data: PackedSeqView<'a>,
46+
pub seq_data: Pool<'a, u8>,
4747

4848
/// Both paths and links can have overlaps, which are CIGAR sequences. They
4949
/// are all stored together here in a flat pool, elements of which point
@@ -400,6 +400,22 @@ pub struct SeqSpan {
400400
pub high_nibble_end: u8,
401401
}
402402

403+
impl SeqSpan {
404+
pub fn len(&self) -> usize {
405+
let begin = match self.high_nibble_begin {
406+
1 => 1,
407+
0 => 0,
408+
_ => panic!("invalid value in high_nibble_begin"),
409+
};
410+
let end = match self.high_nibble_end {
411+
1 => 0,
412+
0 => 1,
413+
_ => panic!("invalid value in high_nibble_end"),
414+
};
415+
(self.end - self.start) * 2 - begin - end
416+
}
417+
}
418+
403419
/// The data storage pools for a `FlatGFA`.
404420
#[derive(Default)]
405421
pub struct GFAStore<'a, P: StoreFamily<'a>> {

flatgfa/src/packedseq.rs

Lines changed: 0 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -134,41 +134,12 @@ impl<'a> PackedSeqView<'a> {
134134
}
135135
}
136136

137-
pub fn view_remaining(data: &'a [u8]) -> (Self, &'a [u8]) {
138-
let (toc, rest) = read_packed_toc(data);
139-
140-
let (data, remaining) = slice_prefix(rest, toc.data);
141-
(
142-
Self {
143-
data: data.into(),
144-
high_nibble_end: match toc.high_nibble_end {
145-
0u8 => false,
146-
1u8 => true,
147-
_ => panic!("Invalid value in high_nibble_end"),
148-
},
149-
high_nibble_begin: match toc.high_nibble_begin {
150-
0u8 => false,
151-
1u8 => true,
152-
_ => panic!("Invalid value in high_nibble_begin"),
153-
},
154-
},
155-
remaining,
156-
)
157-
}
158-
159137
pub fn dump(&self, buf: &mut [u8]) {
160138
let toc = PackedToc::full(self);
161139
let rest = write_bump(buf, &toc).unwrap();
162140
write_bytes(rest, self.data).unwrap();
163141
}
164142

165-
pub fn dump_remaining(&self, buf: &'a mut [u8]) -> &'a mut [u8] {
166-
let toc = PackedToc::full(self);
167-
let rest = write_bump(buf, &toc).unwrap();
168-
let rest = write_bytes(rest, self.data).unwrap();
169-
rest
170-
}
171-
172143
pub fn len(&self) -> usize {
173144
let begin = if self.high_nibble_begin { 1 } else { 0 };
174145
let end = if self.high_nibble_end { 0 } else { 1 };

0 commit comments

Comments
 (0)