From e3eebb507c15697fa04431ee64d954e528613fb4 Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Thu, 26 Oct 2023 08:18:15 +0200 Subject: [PATCH] Refactor history --- src/history.rs | 50 +++++++++++++++++++++----------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) diff --git a/src/history.rs b/src/history.rs index 74335d7..ac042bc 100644 --- a/src/history.rs +++ b/src/history.rs @@ -267,7 +267,7 @@ impl History { "(length(weights) > 0) & (length(composition) != length(weights))" ); - let mut unique = Vec::with_capacity(10); + let mut unique = Vec::with_capacity(100); let this_agent = composition .iter() @@ -331,20 +331,16 @@ impl History { b.new_forward_info(&self.agents); } - let intersect = this_agent - .iter() - .filter(|&agent| b.skills.contains_key(agent)) - .cloned() - .collect::>(); + for agent in &this_agent { + if let Some(skill) = b.skills.get_mut(agent) { + skill.elapsed = + batch::compute_elapsed(self.agents[agent].last_time, b.time); - for agent in &intersect { - b.skills.get_mut(agent).unwrap().elapsed = - batch::compute_elapsed(self.agents[agent].last_time, b.time); + let a = self.agents.get_mut(agent).unwrap(); - let a = self.agents.get_mut(agent).unwrap(); - - a.last_time = if self.time { b.time } else { i64::MAX }; - a.message = b.forward_prior_out(agent); + a.last_time = if self.time { b.time } else { i64::MAX }; + a.message = b.forward_prior_out(agent); + } } k += 1; @@ -353,6 +349,7 @@ impl History { let composition = (i..j) .map(|e| composition[o[e]].clone()) .collect::>(); + let results = if results.is_empty() { Vec::new() } else { @@ -366,15 +363,15 @@ impl History { }; if self.time && self.batches.len() > k && self.batches[k].time == t { - let b = &mut self.batches[k]; + let batch = &mut self.batches[k]; - b.add_events(composition, results, weights, &self.agents); + batch.add_events(composition, results, weights, &self.agents); - for a in b.skills.keys() { + for a in batch.skills.keys() { let agent = self.agents.get_mut(a).unwrap(); agent.last_time = if self.time { t } else { i64::MAX }; - agent.message = b.forward_prior_out(a); + agent.message = batch.forward_prior_out(a); } } else { let mut batch: Batch = Batch::new(t, self.p_draw); @@ -402,20 +399,15 @@ impl History { b.new_forward_info(&self.agents); - let intersect = this_agent - .iter() - .filter(|&agent| b.skills.contains_key(agent)) - .cloned() - .collect::>(); + for agent in &this_agent { + if let Some(skill) = b.skills.get_mut(agent) { + skill.elapsed = batch::compute_elapsed(self.agents[agent].last_time, b.time); - for agent in &intersect { - b.skills.get_mut(agent).unwrap().elapsed = - batch::compute_elapsed(self.agents[agent].last_time, b.time); + let a = self.agents.get_mut(agent).unwrap(); - let a = self.agents.get_mut(agent).unwrap(); - - a.last_time = if self.time { b.time } else { i64::MAX }; - a.message = b.forward_prior_out(agent); + a.last_time = if self.time { b.time } else { i64::MAX }; + a.message = b.forward_prior_out(agent); + } } k += 1;