From c8a98ea3cb82491b4f00897ec67282c55a64277a Mon Sep 17 00:00:00 2001 From: Cutieguwu Date: Wed, 19 Feb 2025 14:06:51 -0500 Subject: [PATCH] Improved get_state method efficiency. --- src/mapping.rs | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/src/mapping.rs b/src/mapping.rs index 99f6ff5..cc11fa2 100644 --- a/src/mapping.rs +++ b/src/mapping.rs @@ -71,7 +71,7 @@ impl From for MapCluster { } -#[derive(Clone, Copy, Debug, Deserialize, PartialEq)] +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, PartialOrd)] pub enum Status { Untested, ForIsolation(u8), @@ -191,33 +191,21 @@ impl MapFile { /// Get current recovery status. pub fn get_state(self) -> Status { let mut recover_status = Status::Damaged; - let mut cluster_stage: Option = Option::None; for cluster in self.map { match cluster.status { Status::Untested => return Status::Untested, - Status::ForIsolation(cs) => { - if recover_status == Status::Damaged { - recover_status = cluster.status; - } else { - cluster_stage = Some(cs); + Status::ForIsolation(_) => { + if recover_status == Status::Damaged + || cluster.status < recover_status { + // Note that recover_status after first condition is + // only ever Status::ForIsolation(_), thus PartialEq, + // PartialOrd are useful for comparing the internal value. + recover_status = cluster.status } }, Status::Damaged => (), } - - if cluster_stage.is_some() { - let recover_stage = match recover_status { - Status::ForIsolation(rs) => rs, - _ => unreachable!(), - }; - - if cluster_stage.unwrap() < recover_stage { - recover_status = cluster.status - } - - cluster_stage = None - } } recover_status