Files @ cf26538b25dc
Branch filter:

Location: CSY/reowolf/src/runtime2/port.rs

cf26538b25dc 1.4 KiB application/rls-services+xml Show Annotation Show as Raw Download as Raw
MH
architecture for send/recv ports in place
#[derive(Clone, Copy, PartialEq, Eq)]
pub(crate) struct PortIdLocal {
    pub index: u32,
}

impl PortIdLocal {
    pub fn new(id: u32) -> Self {
        Self{ index: id }
    }

    // TODO: Unsure about this, maybe remove, then also remove all struct
    //  instances where I call this
    pub fn new_invalid() -> Self {
        Self{ index: u32::MAX }
    }

    pub fn is_valid(&self) -> bool {
        return self.index != u32::MAX;
    }
}

pub enum PortKind {
    Putter,
    Getter,
}

pub enum PortOwnership {
    Unowned, // i.e. held by a native application
    Owned,
    InTransit,
}

/// Represents a port inside of the runtime. May be without owner if it is
/// created by the application interfacing with the runtime, instead of being
/// created by a connector.
pub struct Port {
    // Once created, these values are immutable
    pub self_id: PortIdLocal,
    pub peer_id: PortIdLocal,
    pub kind: PortKind,
    // But this can be changed, but only by the connector that owns it
    pub ownership: PortOwnership,
    pub owning_connector: u32,
    pub peer_connector: u32, // might be temporarily inconsistent while peer port is sent around in non-sync phase.
}



// TODO: Turn port ID into its own type
pub struct Channel {
    pub putter_id: u32, // can put on it, so from the connector's point of view, this is an output
    pub getter_id: u32, // vice versa: can get on it, so an input for the connector
}