From 4c9116f4253bbad60f52c650b7e8b5078f0fa93f 2020-06-30 16:42:26 From: Christopher Esterhuyse Date: 2020-06-30 16:42:26 Subject: [PATCH] misc visibility and field cleanup --- diff --git a/src/common.rs b/src/common.rs index 569f040890b82049e842ba03cb2136771425a421..85346ae37b405be4238dd9d05c14eec6f8b91045 100644 --- a/src/common.rs +++ b/src/common.rs @@ -1,7 +1,7 @@ ///////////////////// PRELUDE ///////////////////// -pub use crate::protocol::{ComponentState, ProtocolDescription}; -pub use crate::runtime::{NonsyncProtoContext, SyncProtoContext}; +pub(crate) use crate::protocol::{ComponentState, ProtocolDescription}; +pub(crate) use crate::runtime::{NonsyncProtoContext, SyncProtoContext}; pub use core::{ cmp::Ordering, diff --git a/src/protocol/eval.rs b/src/protocol/eval.rs index 06b0c137d25ca05383402156ffbd8f00b0543e45..a7c48c03b853995812717b481c17f850ca2d9b5d 100644 --- a/src/protocol/eval.rs +++ b/src/protocol/eval.rs @@ -1611,7 +1611,7 @@ pub enum EvalContinuation { } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub struct Prompt { +pub(crate) struct Prompt { definition: DefinitionId, store: Store, position: Option, diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs index f8152663c94d7478727360046c862f7c0192c0f2..ab8afb4fb6e22d9cccf63b16b7fe72dfb17dfff0 100644 --- a/src/protocol/mod.rs +++ b/src/protocol/mod.rs @@ -1,7 +1,7 @@ mod arena; mod ast; mod eval; -pub mod inputsource; +pub(crate) mod inputsource; mod lexer; mod library; mod parser; @@ -20,10 +20,10 @@ pub struct ProtocolDescription { root: RootId, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub struct ComponentState { +pub(crate) struct ComponentState { prompt: Prompt, } -pub enum EvalContext<'a> { +pub(crate) enum EvalContext<'a> { Nonsync(&'a mut NonsyncProtoContext<'a>), Sync(&'a mut SyncProtoContext<'a>), // None, @@ -51,7 +51,7 @@ impl ProtocolDescription { } } } - pub fn component_polarities( + pub(crate) fn component_polarities( &self, identifier: &[u8], ) -> Result, AddComponentError> { @@ -95,7 +95,7 @@ impl ProtocolDescription { Ok(result) } // expects port polarities to be correct - pub fn new_main_component(&self, identifier: &[u8], ports: &[PortId]) -> ComponentState { + pub(crate) fn new_main_component(&self, identifier: &[u8], ports: &[PortId]) -> ComponentState { let mut args = Vec::new(); for (&x, y) in ports.iter().zip(self.component_polarities(identifier).unwrap()) { match y { @@ -110,7 +110,7 @@ impl ProtocolDescription { } } impl ComponentState { - pub fn nonsync_run<'a: 'b, 'b>( + pub(crate) fn nonsync_run<'a: 'b, 'b>( &'a mut self, context: &'b mut NonsyncProtoContext<'b>, pd: &'a ProtocolDescription, @@ -146,7 +146,7 @@ impl ComponentState { } } - pub fn sync_run<'a: 'b, 'b>( + pub(crate) fn sync_run<'a: 'b, 'b>( &'a mut self, context: &'b mut SyncProtoContext<'b>, pd: &'a ProtocolDescription, diff --git a/src/runtime/communication.rs b/src/runtime/communication.rs index d7cd77cba7c3d4b5180bcc38bf376c961add6e3f..437a9aec36d61e1676ca79bb93477511582aabf3 100644 --- a/src/runtime/communication.rs +++ b/src/runtime/communication.rs @@ -9,7 +9,7 @@ struct BranchingNative { struct NativeBranch { index: usize, gotten: HashMap, - to_get: HashSet, + to_get: HashSet, // native branch is ended iff to_get.is_empty() } #[derive(Debug)] struct SolutionStorage { @@ -26,9 +26,9 @@ struct BranchingProtoComponent { } #[derive(Debug, Clone)] struct ProtoComponentBranch { - ended: bool, inbox: HashMap, state: ComponentState, + ended: bool, } struct CyclicDrainer<'a, K: Eq + Hash, V> { input: &'a mut HashMap, diff --git a/src/runtime/mod.rs b/src/runtime/mod.rs index 77868fab50213f7e4d0a8a045b5154c4cb1c63c2..2110ddbcd370ba2376e749d43862ec156e05962d 100644 --- a/src/runtime/mod.rs +++ b/src/runtime/mod.rs @@ -14,41 +14,70 @@ use crate::common::*; use error::*; #[derive(Debug)] -pub struct RoundOk { +#[repr(C)] +pub struct Connector { + unphased: ConnectorUnphased, + phased: ConnectorPhased, +} +pub trait Logger: Debug { + fn line_writer(&mut self) -> &mut dyn std::io::Write; +} +#[derive(Debug)] +pub struct VecLogger(ConnectorId, Vec); +#[derive(Debug)] +pub struct DummyLogger; +#[derive(Debug)] +pub struct FileLogger(ConnectorId, std::fs::File); +pub(crate) struct NonsyncProtoContext<'a> { + logger: &'a mut dyn Logger, + proto_component_id: ProtoComponentId, + port_info: &'a mut PortInfo, + id_manager: &'a mut IdManager, + proto_component_ports: &'a mut HashSet, + unrun_components: &'a mut Vec<(ProtoComponentId, ProtoComponent)>, +} +pub(crate) struct SyncProtoContext<'a> { + logger: &'a mut dyn Logger, + predicate: &'a Predicate, + port_info: &'a PortInfo, + inbox: &'a HashMap, +} +#[derive(Debug)] +struct RoundOk { batch_index: usize, gotten: HashMap, } -pub struct VecSet { +struct VecSet { // invariant: ordered, deduplicated vec: Vec, } #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)] -pub enum ComponentId { +enum ComponentId { Native, Proto(ProtoComponentId), } #[derive(Debug, Clone, Copy, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)] -pub enum Route { +enum Route { LocalComponent(ComponentId), Endpoint { index: usize }, } #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct MyPortInfo { +struct MyPortInfo { polarity: Polarity, port: PortId, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub enum Decision { +enum Decision { Failure, Success(Predicate), } #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub enum Msg { +enum Msg { SetupMsg(SetupMsg), CommMsg(CommMsg), } #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub enum SetupMsg { +enum SetupMsg { MyPortInfo(MyPortInfo), LeaderWave { wave_leader: ConnectorId }, LeaderAnnounce { tree_leader: ConnectorId }, @@ -56,85 +85,70 @@ pub enum SetupMsg { SessionGather { unoptimized_map: HashMap }, SessionScatter { optimized_map: HashMap }, } -#[derive(Debug, Clone)] -pub(crate) struct SerdeProtocolDescription(Arc); #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct SessionInfo { +struct SessionInfo { serde_proto_description: SerdeProtocolDescription, port_info: PortInfo, proto_components: HashMap, } - +#[derive(Debug, Clone)] +struct SerdeProtocolDescription(Arc); #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct CommMsg { - pub round_index: usize, - pub contents: CommMsgContents, +struct CommMsg { + round_index: usize, + contents: CommMsgContents, } #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub enum CommMsgContents { +enum CommMsgContents { SendPayload(SendPayloadMsg), Suggest { suggestion: Decision }, // SINKWARD Announce { decision: Decision }, // SINKAWAYS } #[derive(Clone, Debug, serde::Serialize, serde::Deserialize)] -pub struct SendPayloadMsg { +struct SendPayloadMsg { predicate: Predicate, payload: Payload, } #[derive(Debug, PartialEq)] -pub enum CommonSatResult { +enum CommonSatResult { FormerNotLatter, LatterNotFormer, Equivalent, New(Predicate), Nonexistant, } -pub struct Endpoint { +struct Endpoint { inbox: Vec, stream: TcpStream, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] -pub struct ProtoComponent { +struct ProtoComponent { state: ComponentState, ports: HashSet, } -pub trait Logger: Debug { - fn line_writer(&mut self) -> &mut dyn std::io::Write; -} -#[derive(Debug)] -pub struct VecLogger(ConnectorId, Vec); -#[derive(Debug)] -pub struct DummyLogger; -#[derive(Debug)] -pub struct FileLogger(ConnectorId, std::fs::File); #[derive(Debug, Clone)] -pub struct EndpointSetup { - pub sock_addr: SocketAddr, - pub endpoint_polarity: EndpointPolarity, +struct EndpointSetup { + sock_addr: SocketAddr, + endpoint_polarity: EndpointPolarity, } #[derive(Debug)] -pub struct EndpointExt { +struct EndpointExt { endpoint: Endpoint, getter_for_incoming: PortId, } #[derive(Debug)] -pub struct Neighborhood { +struct Neighborhood { parent: Option, children: VecSet, } #[derive(Debug)] -pub struct MemInMsg { - inp: PortId, - msg: Payload, -} -#[derive(Debug)] -pub struct IdManager { +struct IdManager { connector_id: ConnectorId, port_suffix_stream: U32Stream, proto_component_suffix_stream: U32Stream, } #[derive(Debug)] -pub struct EndpointManager { +struct EndpointManager { // invariants: // 1. endpoint N is registered READ | WRITE with poller // 2. Events is empty @@ -146,28 +160,21 @@ pub struct EndpointManager { endpoint_exts: Vec, } #[derive(Clone, Debug, Default, serde::Serialize, serde::Deserialize)] -pub struct PortInfo { +struct PortInfo { polarities: HashMap, peers: HashMap, routes: HashMap, } #[derive(Debug)] -// #[repr(C)] -pub struct Connector { - unphased: ConnectorUnphased, - phased: ConnectorPhased, -} -#[derive(Debug)] -pub struct ConnectorCommunication { +struct ConnectorCommunication { round_index: usize, endpoint_manager: EndpointManager, neighborhood: Neighborhood, - mem_inbox: Vec, native_batches: Vec, round_result: Result, SyncError>, } #[derive(Debug)] -pub struct ConnectorUnphased { +struct ConnectorUnphased { proto_description: Arc, proto_components: HashMap, logger: Box, @@ -176,34 +183,20 @@ pub struct ConnectorUnphased { port_info: PortInfo, } #[derive(Debug)] -pub enum ConnectorPhased { +enum ConnectorPhased { Setup { endpoint_setups: Vec<(PortId, EndpointSetup)>, surplus_sockets: u16 }, Communication(Box), } #[derive(Default, Clone, Eq, PartialEq, Hash, serde::Serialize, serde::Deserialize)] -pub struct Predicate { - pub assigned: BTreeMap, +struct Predicate { + assigned: BTreeMap, } #[derive(Debug, Default)] -pub struct NativeBatch { +struct NativeBatch { // invariant: putters' and getters' polarities respected to_put: HashMap, to_get: HashSet, } -pub struct NonsyncProtoContext<'a> { - logger: &'a mut dyn Logger, - proto_component_id: ProtoComponentId, - port_info: &'a mut PortInfo, - id_manager: &'a mut IdManager, - proto_component_ports: &'a mut HashSet, - unrun_components: &'a mut Vec<(ProtoComponentId, ProtoComponent)>, -} -pub struct SyncProtoContext<'a> { - logger: &'a mut dyn Logger, - predicate: &'a Predicate, - port_info: &'a PortInfo, - inbox: &'a HashMap, -} //////////////// pub fn would_block(err: &std::io::Error) -> bool { err.kind() == std::io::ErrorKind::WouldBlock @@ -370,7 +363,7 @@ impl Predicate { /// If the resulting predicate is equivlanet to self, other, or both, /// FormerNotLatter, LatterNotFormer and Equivalent are returned respectively. /// otherwise New(N) is returned. - pub fn common_satisfier(&self, other: &Self) -> CommonSatResult { + fn common_satisfier(&self, other: &Self) -> CommonSatResult { use CommonSatResult as Csr; // iterators over assignments of both predicates. Rely on SORTED ordering of BTreeMap's keys. let [mut s_it, mut o_it] = [self.assigned.iter(), other.assigned.iter()]; diff --git a/src/runtime/setup.rs b/src/runtime/setup.rs index f02f2f9bed2a771b3a1b607c357cb6337de81d1d..5850bb4a2cddd79d5c801ad2946d04cffb98b3bd 100644 --- a/src/runtime/setup.rs +++ b/src/runtime/setup.rs @@ -84,7 +84,6 @@ impl Connector { round_index: 0, endpoint_manager, neighborhood, - mem_inbox: Default::default(), native_batches: vec![Default::default()], round_result: Ok(None), };