Reimplement FileEncoder with a small-write optimization
This commit is contained in:
parent
62ebe3a2b1
commit
01e9798148
6 changed files with 102 additions and 222 deletions
|
@ -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
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue