Reimplement FileEncoder with a small-write optimization

This commit is contained in:
Ben Kimock 2023-09-04 12:40:08 -04:00
parent 62ebe3a2b1
commit 01e9798148
6 changed files with 102 additions and 222 deletions

View file

@ -394,7 +394,10 @@ struct NodeInfo<K: DepKind> {
impl<K: DepKind> Encodable<FileEncoder> for NodeInfo<K> {
fn encode(&self, e: &mut FileEncoder) {
let header = SerializedNodeHeader::new(self);
e.emit_raw_bytes(&header.bytes);
e.write_with(|dest| {
*dest = header.bytes;
header.bytes.len()
});
if header.len().is_none() {
e.emit_usize(self.edges.len());
@ -402,8 +405,10 @@ impl<K: DepKind> Encodable<FileEncoder> for NodeInfo<K> {
let bytes_per_index = header.bytes_per_index();
for node_index in self.edges.iter() {
let bytes = node_index.as_u32().to_le_bytes();
e.emit_raw_bytes(&bytes[..bytes_per_index]);
e.write_with(|dest| {
*dest = node_index.as_u32().to_le_bytes();
bytes_per_index
});
}
}
}