Compare commits
1 Commits
convert
...
block-head
| Author | SHA1 | Date | |
|---|---|---|---|
|
8162fa90bc
|
65
src/v1.rs
65
src/v1.rs
@@ -363,25 +363,17 @@ enum EventType{
|
||||
#[binrw]
|
||||
#[brw(little)]
|
||||
struct BlockHeader{
|
||||
num_input_events:u16,
|
||||
num_output_events:u16,
|
||||
num_sound_events:u16,
|
||||
num_world_events:u16,
|
||||
num_gravity_events:u16,
|
||||
num_run_events:u16,
|
||||
num_camera_events:u16,
|
||||
num_setting_events:u16,
|
||||
num_events:[u16;8],
|
||||
}
|
||||
impl BlockHeader{
|
||||
fn payload_size(&self)->usize{
|
||||
self.num_input_events as usize*EVENT_SIZE[EventType::Input as usize]
|
||||
+self.num_output_events as usize*EVENT_SIZE[EventType::Output as usize]
|
||||
+self.num_sound_events as usize*EVENT_SIZE[EventType::Sound as usize]
|
||||
+self.num_world_events as usize*EVENT_SIZE[EventType::World as usize]
|
||||
+self.num_gravity_events as usize*EVENT_SIZE[EventType::Gravity as usize]
|
||||
+self.num_run_events as usize*EVENT_SIZE[EventType::Run as usize]
|
||||
+self.num_camera_events as usize*EVENT_SIZE[EventType::Camera as usize]
|
||||
+self.num_setting_events as usize*EVENT_SIZE[EventType::Setting as usize]
|
||||
self.num_events
|
||||
.into_iter()
|
||||
.zip(EVENT_SIZE)
|
||||
.map(|(num_events,event_size)|
|
||||
num_events as usize*event_size
|
||||
)
|
||||
.sum()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -419,14 +411,14 @@ impl Block{
|
||||
let mut buffer=Vec::with_capacity(block_header.payload_size());
|
||||
zstd::stream::copy_decode(data,&mut buffer)?;
|
||||
let mut reader=std::io::Cursor::new(buffer);
|
||||
read_data_into_events(&mut reader,&mut self.input_events,block_header.num_input_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.output_events,block_header.num_output_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.sound_events,block_header.num_sound_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.world_events,block_header.num_world_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.gravity_events,block_header.num_gravity_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.run_events,block_header.num_run_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.camera_events,block_header.num_camera_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.setting_events,block_header.num_setting_events as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.input_events,block_header.num_events[EventType::Input as usize] as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.output_events,block_header.num_events[EventType::Output as usize] as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.sound_events,block_header.num_events[EventType::Sound as usize] as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.world_events,block_header.num_events[EventType::World as usize] as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.gravity_events,block_header.num_events[EventType::Gravity as usize] as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.run_events,block_header.num_events[EventType::Run as usize] as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.camera_events,block_header.num_events[EventType::Camera as usize] as usize,Vec::reserve_exact)?;
|
||||
read_data_into_events(&mut reader,&mut self.setting_events,block_header.num_events[EventType::Setting as usize] as usize,Vec::reserve_exact)?;
|
||||
Ok(())
|
||||
}
|
||||
/// Read a complete data block and append the elements to the timelines in this block.
|
||||
@@ -436,14 +428,14 @@ impl Block{
|
||||
let mut buffer=Vec::with_capacity(block_header.payload_size());
|
||||
zstd::stream::copy_decode(data,&mut buffer)?;
|
||||
let mut reader=std::io::Cursor::new(buffer);
|
||||
read_data_into_events(&mut reader,&mut self.input_events,block_header.num_input_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.output_events,block_header.num_output_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.sound_events,block_header.num_sound_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.world_events,block_header.num_world_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.gravity_events,block_header.num_gravity_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.run_events,block_header.num_run_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.camera_events,block_header.num_camera_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.setting_events,block_header.num_setting_events as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.input_events,block_header.num_events[EventType::Input as usize] as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.output_events,block_header.num_events[EventType::Output as usize] as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.sound_events,block_header.num_events[EventType::Sound as usize] as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.world_events,block_header.num_events[EventType::World as usize] as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.gravity_events,block_header.num_events[EventType::Gravity as usize] as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.run_events,block_header.num_events[EventType::Run as usize] as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.camera_events,block_header.num_events[EventType::Camera as usize] as usize,Vec::reserve)?;
|
||||
read_data_into_events(&mut reader,&mut self.setting_events,block_header.num_events[EventType::Setting as usize] as usize,Vec::reserve)?;
|
||||
Ok(())
|
||||
}
|
||||
fn extend_from_block_id_iter<'a,R:BinReaderExt>(&mut self,mut data:R,block_timelines:&BlockTimelines,blocks:impl IntoIterator<Item=&'a Timed<BlockId>>)->Result<(),Error>{
|
||||
@@ -653,14 +645,7 @@ pub fn serialize<W:binrw::BinWriterExt>(block:&Block,writer:&mut W)->Result<(),B
|
||||
}
|
||||
fn header(&self)->BlockHeader{
|
||||
BlockHeader{
|
||||
num_input_events:self.0[EventType::Input as usize].len() as u16,
|
||||
num_output_events:self.0[EventType::Output as usize].len() as u16,
|
||||
num_sound_events:self.0[EventType::Sound as usize].len() as u16,
|
||||
num_world_events:self.0[EventType::World as usize].len() as u16,
|
||||
num_gravity_events:self.0[EventType::Gravity as usize].len() as u16,
|
||||
num_run_events:self.0[EventType::Run as usize].len() as u16,
|
||||
num_camera_events:self.0[EventType::Camera as usize].len() as u16,
|
||||
num_setting_events:self.0[EventType::Setting as usize].len() as u16,
|
||||
num_events:self.0.map(|events|events.len() as u16),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user