From 990f19d303c060d80646ebb64ce126194927d634 Mon Sep 17 00:00:00 2001 From: swz-git Date: Sat, 18 Jul 2026 14:53:40 +0200 Subject: [PATCH 1/2] generic `byte_mesh_file_map` argument in `init_from_mem` --- rocketsim/src/base.rs | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/rocketsim/src/base.rs b/rocketsim/src/base.rs index 8bab32ea..dc809f40 100644 --- a/rocketsim/src/base.rs +++ b/rocketsim/src/base.rs @@ -94,10 +94,12 @@ fn init_from_path(collision_meshes_folder: &Path, silent: bool) -> IoResult<()> init_from_mem(mesh_file_map, silent) } -pub fn init_from_mem( - byte_mesh_file_map: FxHashMap>>, - silent: bool, -) -> IoResult<()> { +pub fn init_from_mem(byte_mesh_file_map: I, silent: bool) -> IoResult<()> +where + I: IntoIterator, + V: IntoIterator, + B: AsRef<[u8]>, +{ if !silent { let _ = logging::try_init(); } @@ -123,6 +125,8 @@ pub fn init_from_mem( for (game_mode, byte_mesh_files) in byte_mesh_file_map { info!("Loading arena meshes for {}...", game_mode.name()); + let byte_mesh_files = byte_mesh_files.into_iter().collect::>(); + if byte_mesh_files.is_empty() { info!("\tNo meshes, skipping"); continue; @@ -133,7 +137,7 @@ pub fn init_from_mem( let mut target_hashes = game_mode.get_hashes(); for (i, entry) in byte_mesh_files.into_iter().enumerate() { - let mesh_file = CollisionMeshFile::read_from_bytes(&entry)?; + let mesh_file = CollisionMeshFile::read_from_bytes(entry.as_ref())?; let hash = mesh_file.get_hash(); let Some(hash_count) = target_hashes.get_mut(&hash) else { warn!( From 6d7d023b4d156d61abb8b277e5e5f28955565fa4 Mon Sep 17 00:00:00 2001 From: swz-git Date: Thu, 23 Jul 2026 00:12:43 +0200 Subject: [PATCH 2/2] avoid unnecessary `.collect()` on iter. --- rocketsim/src/base.rs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/rocketsim/src/base.rs b/rocketsim/src/base.rs index dc809f40..3e026b1f 100644 --- a/rocketsim/src/base.rs +++ b/rocketsim/src/base.rs @@ -125,18 +125,18 @@ where for (game_mode, byte_mesh_files) in byte_mesh_file_map { info!("Loading arena meshes for {}...", game_mode.name()); - let byte_mesh_files = byte_mesh_files.into_iter().collect::>(); + let mut byte_mesh_files = byte_mesh_files.into_iter().peekable(); - if byte_mesh_files.is_empty() { + if byte_mesh_files.peek().is_none() { info!("\tNo meshes, skipping"); continue; } - let mut meshes = Vec::with_capacity(byte_mesh_files.len()); - let mut mesh_files = Vec::with_capacity(byte_mesh_files.len()); + let mut meshes = Vec::new(); + let mut mesh_files = Vec::new(); let mut target_hashes = game_mode.get_hashes(); - for (i, entry) in byte_mesh_files.into_iter().enumerate() { + for (i, entry) in byte_mesh_files.enumerate() { let mesh_file = CollisionMeshFile::read_from_bytes(entry.as_ref())?; let hash = mesh_file.get_hash(); let Some(hash_count) = target_hashes.get_mut(&hash) else {