From 49b2c514150ba0e4be9ada4bbc0827ce5ec9136b Mon Sep 17 00:00:00 2001 From: Daniel Ahrens Date: Fri, 29 Jan 2021 12:32:51 +0100 Subject: [PATCH 1/3] add_stage now checks stage existence --- crates/bevy_ecs/src/schedule/mod.rs | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/crates/bevy_ecs/src/schedule/mod.rs b/crates/bevy_ecs/src/schedule/mod.rs index 8920fbf24662c..22f7819406734 100644 --- a/crates/bevy_ecs/src/schedule/mod.rs +++ b/crates/bevy_ecs/src/schedule/mod.rs @@ -57,6 +57,10 @@ impl Schedule { } pub fn add_stage(&mut self, name: &str, stage: S) -> &mut Self { + if self.stages.get(name).is_some() { + panic!("Stage already exists: {}.", name); + } + self.stage_order.push(name.to_string()); self.stages.insert(name.to_string(), Box::new(stage)); self From de0786f1e85eed9f50dd19aba024127bccf8a106 Mon Sep 17 00:00:00 2001 From: Telzhaak Date: Sat, 30 Jan 2021 11:51:59 +0100 Subject: [PATCH 2/3] Avoid double HashTable lookup part1 bjorn3 suggested this change to improve startup time Co-authored-by: bjorn3 --- crates/bevy_ecs/src/schedule/mod.rs | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/crates/bevy_ecs/src/schedule/mod.rs b/crates/bevy_ecs/src/schedule/mod.rs index 22f7819406734..715fc976a6bc7 100644 --- a/crates/bevy_ecs/src/schedule/mod.rs +++ b/crates/bevy_ecs/src/schedule/mod.rs @@ -57,12 +57,11 @@ impl Schedule { } pub fn add_stage(&mut self, name: &str, stage: S) -> &mut Self { - if self.stages.get(name).is_some() { + self.stage_order.push(name.to_string()); + let prev = self.stages.insert(name.to_string(), Box::new(stage)); + if prev.is_some() { panic!("Stage already exists: {}.", name); } - - self.stage_order.push(name.to_string()); - self.stages.insert(name.to_string(), Box::new(stage)); self } From 7163dfab982f1b411f2304e0d3694617d33d2923 Mon Sep 17 00:00:00 2001 From: Daniel Ahrens Date: Sat, 30 Jan 2021 12:00:09 +0100 Subject: [PATCH 3/3] part 2, fmt, clippy --- crates/bevy_ecs/src/schedule/mod.rs | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/crates/bevy_ecs/src/schedule/mod.rs b/crates/bevy_ecs/src/schedule/mod.rs index 715fc976a6bc7..9c9ada93affa7 100644 --- a/crates/bevy_ecs/src/schedule/mod.rs +++ b/crates/bevy_ecs/src/schedule/mod.rs @@ -66,10 +66,6 @@ impl Schedule { } pub fn add_stage_after(&mut self, target: &str, name: &str, stage: S) -> &mut Self { - if self.stages.get(name).is_some() { - panic!("Stage already exists: {}.", name); - } - let target_index = self .stage_order .iter() @@ -78,16 +74,15 @@ impl Schedule { .map(|(i, _)| i) .unwrap_or_else(|| panic!("Target stage does not exist: {}.", target)); - self.stages.insert(name.to_string(), Box::new(stage)); self.stage_order.insert(target_index + 1, name.to_string()); + let prev = self.stages.insert(name.to_string(), Box::new(stage)); + if prev.is_some() { + panic!("Stage already exists: {}.", name); + } self } pub fn add_stage_before(&mut self, target: &str, name: &str, stage: S) -> &mut Self { - if self.stages.get(name).is_some() { - panic!("Stage already exists: {}.", name); - } - let target_index = self .stage_order .iter() @@ -96,8 +91,11 @@ impl Schedule { .map(|(i, _)| i) .unwrap_or_else(|| panic!("Target stage does not exist: {}.", target)); - self.stages.insert(name.to_string(), Box::new(stage)); self.stage_order.insert(target_index, name.to_string()); + let prev = self.stages.insert(name.to_string(), Box::new(stage)); + if prev.is_some() { + panic!("Stage already exists: {}.", name); + } self }