diff --git a/src/runtime2/component/consensus.rs b/src/runtime2/component/consensus.rs index 428f88e615e5459211b971730ded896652c8c5ce..2be94616b20a62067d567a01f3bf70b108bbc889 100644 --- a/src/runtime2/component/consensus.rs +++ b/src/runtime2/component/consensus.rs @@ -4,6 +4,7 @@ use crate::runtime2::runtime::*; use crate::runtime2::communication::*; use super::component_pdl::*; +use super::component_context::*; pub struct PortAnnotation { self_comp_id: CompId, @@ -286,7 +287,8 @@ impl Consensus { let mut local_solution = Vec::with_capacity(self.ports.len()); for port in &self.ports { if let Some(mapping) = port.mapping { - let port_info = comp_ctx.get_port(port.self_port_id); + let port_handle = comp_ctx.get_port_handle(port.self_port_id); + let port_info = comp_ctx.get_port(port_handle); let new_entry = match port_info.kind { PortKind::Putter => SyncLocalSolutionEntry::Putter(SyncSolutionPutterPort{ self_comp_id: comp_ctx.id, @@ -327,11 +329,11 @@ impl Consensus { fn make_ports_consistent_with_ctx(&mut self, comp_ctx: &CompCtx) { let mut needs_setting_ports = false; - if comp_ctx.ports.len() != self.ports.len() { + if comp_ctx.num_ports() != self.ports.len() { needs_setting_ports = true; } else { - for idx in 0..comp_ctx.ports.len() { - let comp_port_id = comp_ctx.ports[idx].self_id; + for (idx, port) in comp_ctx.iter_ports().enumerate() { + let comp_port_id = port.self_id; let cons_port_id = self.ports[idx].self_port_id; if comp_port_id != cons_port_id { needs_setting_ports = true; @@ -342,8 +344,8 @@ impl Consensus { if needs_setting_ports { self.ports.clear(); - self.ports.reserve(comp_ctx.ports.len()); - for port in &comp_ctx.ports { + self.ports.reserve(comp_ctx.num_ports()); + for port in comp_ctx.iter_ports() { self.ports.push(PortAnnotation::new(comp_ctx.id, port.self_id)) } } @@ -419,7 +421,7 @@ impl Consensus { // Sender knows of someone with a higher ID. So store highest ID, // notify all peers, and forward local solutions self.highest_id = header.highest_id; - for peer in &comp_ctx.peers { + for peer in comp_ctx.iter_peers() { if peer.id == header.sending_id { continue; } @@ -438,7 +440,8 @@ impl Consensus { sync_header: self.create_sync_header(comp_ctx), content: SyncMessageContent::NotificationOfLeader, }; - let peer_info = comp_ctx.get_peer(header.sending_id); + let peer_handle = comp_ctx.get_peer_handle(header.sending_id); + let peer_info = comp_ctx.get_peer(peer_handle); peer_info.handle.send_message(sched_ctx, Message::Sync(message), true); } // else: exactly equal } @@ -589,7 +592,7 @@ impl Consensus { expected_mapping, new_mapping, source_port: port_info.self_id, - target_port: port_info.peer_id, + target_port: port_info.peer_port_id, }; }