1 Commits

Author SHA1 Message Date
8162fa90bc simplify BlockHeader 2026-02-13 15:57:42 -08:00

View File

@@ -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),
}
}
}