mindustry logic execution, map- and schematic- parsing and rendering
reserve sspace for item&liquid storage
| -rw-r--r-- | Cargo.toml | 2 | ||||
| -rw-r--r-- | src/data/map.rs | 8 | ||||
| -rw-r--r-- | src/item/storage.rs | 4 |
3 files changed, 11 insertions, 3 deletions
@@ -1,6 +1,6 @@ [package] name = "mindus" -version = "4.0.3" +version = "4.0.4" edition = "2021" description = "A library for working with mindustry data formats (eg schematics and maps) (fork of plandustry)" authors = [ diff --git a/src/data/map.rs b/src/data/map.rs index 636e3f3..4e7cb9e 100644 --- a/src/data/map.rs +++ b/src/data/map.rs @@ -358,7 +358,9 @@ impl<'l> Build<'l> { /// fn read_items(from: &mut DataRead, to: &mut Storage<Item>) -> Result<(), ReadError> { to.clear(); - for _ in 0..from.read_u16()? { + let n = from.read_u16()?; + to.reserve(n as usize); + for _ in 0..n { let item = from.read_u16()?; let amount = from.read_u32()?; if let Ok(item) = Item::try_from(item) { @@ -374,7 +376,9 @@ fn read_items(from: &mut DataRead, to: &mut Storage<Item>) -> Result<(), ReadErr /// - amount: [`f32`] fn read_liquids(from: &mut DataRead, to: &mut Storage<Fluid>) -> Result<(), ReadError> { to.clear(); - for _ in 0..from.read_u16()? { + let n = from.read_u16()?; + to.reserve(n as usize); + for _ in 0..n { let fluid = from.read_u16()?; let amount = from.read_f32()?; if let Ok(fluid) = Fluid::try_from(fluid) { diff --git a/src/item/storage.rs b/src/item/storage.rs index ec7f219..6064594 100644 --- a/src/item/storage.rs +++ b/src/item/storage.rs @@ -65,6 +65,10 @@ where self.total == 0 } + pub fn reserve(&mut self, n: usize) { + self.base.reserve(n) + } + /// get item count of certain element /// /// ``` |