mindustry logic execution, map- and schematic- parsing and rendering
reserve sspace for item&liquid storage
bendn 2023-08-14
parent 1e11c68 · commit 5140be5
-rw-r--r--Cargo.toml2
-rw-r--r--src/data/map.rs8
-rw-r--r--src/item/storage.rs4
3 files changed, 11 insertions, 3 deletions
diff --git a/Cargo.toml b/Cargo.toml
index 6f73755..e9795b0 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -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
///
/// ```