1
0
Fork 0
mirror of https://codeberg.org/demostf/parser.git synced 2026-06-03 18:24:05 +02:00

reuse prop vector for entities

This commit is contained in:
Robin Appelman 2019-08-29 21:16:38 +02:00
commit 6636eb4a93
3 changed files with 18 additions and 11 deletions

1
.gitignore vendored
View file

@ -5,3 +5,4 @@
*.data* *.data*
*.iml *.iml
*.bench *.bench
heaptrack.*

View file

@ -125,7 +125,7 @@ fn get_entity_for_update(
Ok(PacketEntity { Ok(PacketEntity {
server_class: class_id, server_class: class_id,
entity_index, entity_index,
props: Vec::new(), props: Vec::with_capacity(8),
in_pvs: false, in_pvs: false,
pvs, pvs,
serial_number: 0, serial_number: 0,
@ -158,16 +158,16 @@ impl Parse for PacketEntitiesMessage {
let mut entity = let mut entity =
Self::read_enter(&mut data, entity_index, state, base_line as usize)?; Self::read_enter(&mut data, entity_index, state, base_line as usize)?;
let send_table = get_send_table(state, entity.server_class)?; let send_table = get_send_table(state, entity.server_class)?;
let updated_props = Self::read_update(&mut data, send_table)?; let updated_props = Self::read_update(&mut data, send_table, &mut entity.props)?;
entity.apply_update(updated_props); //entity.apply_update(updated_props);
entities.push(entity); entities.push(entity);
} else if pvs == PVS::Preserve { } else if pvs == PVS::Preserve {
let mut entity = get_entity_for_update(state, entity_index, pvs)?; let mut entity = get_entity_for_update(state, entity_index, pvs)?;
let send_table = get_send_table(state, entity.server_class)?; let send_table = get_send_table(state, entity.server_class)?;
let updated_props = Self::read_update(&mut data, send_table)?; let updated_props = Self::read_update(&mut data, send_table, &mut entity.props)?;
entity.props = updated_props; // entity.props = updated_props;
entities.push(entity); entities.push(entity);
} else if state.entity_classes.contains_key(&entity_index) { } else if state.entity_classes.contains_key(&entity_index) {
@ -213,7 +213,7 @@ impl PacketEntitiesMessage {
Some(baseline) => baseline.clone(), Some(baseline) => baseline.clone(),
None => match state.static_baselines.get(&class_index) { None => match state.static_baselines.get(&class_index) {
Some(static_baseline) => state.get_static_baseline(class_index, send_table)?, Some(static_baseline) => state.get_static_baseline(class_index, send_table)?,
None => Vec::new(), None => Vec::with_capacity(8),
}, },
}; };
@ -228,10 +228,14 @@ impl PacketEntitiesMessage {
}) })
} }
pub fn read_update(stream: &mut Stream, send_table: &SendTable) -> Result<Vec<SendProp>> { pub fn read_update(
stream: &mut Stream,
send_table: &SendTable,
props: &mut Vec<SendProp>,
) -> Result<()> {
let mut index = -1; let mut index = -1;
//let mut props: HashMap<i32, SendProp> = HashMap::new(); //let mut props: HashMap<i32, SendProp> = HashMap::new();
let mut props = Vec::with_capacity(8); //let mut props = Vec::with_capacity(8);
while stream.read()? { while stream.read()? {
let diff: u32 = read_bit_var(stream)?; let diff: u32 = read_bit_var(stream)?;
@ -254,7 +258,7 @@ impl PacketEntitiesMessage {
} }
} }
Ok(props) Ok(())
//Ok(props.into_iter().map(|(_, prop)| prop).collect()) //Ok(props.into_iter().map(|(_, prop)| prop).collect())
} }
} }

View file

@ -47,7 +47,9 @@ impl StaticBaseline {
} }
pub fn parse(&self, send_table: &SendTable) -> Result<Vec<SendProp>> { pub fn parse(&self, send_table: &SendTable) -> Result<Vec<SendProp>> {
PacketEntitiesMessage::read_update(&mut self.raw.clone(), send_table) let mut props = Vec::with_capacity(8);
PacketEntitiesMessage::read_update(&mut self.raw.clone(), send_table, &mut props)?;
Ok(props)
} }
} }
@ -84,7 +86,7 @@ impl ParserState {
let props = static_baseline.parse(send_table)?; let props = static_baseline.parse(send_table)?;
cached.entry(class_id).or_insert(props).clone() cached.entry(class_id).or_insert(props).clone()
} }
None => Vec::new(), None => Vec::with_capacity(8),
}, },
}) })
} }