use crate::{arc, Marking, PlaceId, TransitionId};
#[derive(Default, Debug, Clone)]
pub struct Place {
pub(crate) id: PlaceId,
pub label: Option<String>,
pub initial: usize,
pub produced_by: Marking<TransitionId>,
pub consumed_by: Marking<TransitionId>,
pub deleted: bool,
}
impl Place {
#[must_use]
pub fn id(&self) -> PlaceId {
self.id
}
#[must_use]
pub fn is_disconnected(&self) -> bool {
self.produced_by.is_empty() && self.consumed_by.is_empty()
}
#[must_use]
pub fn get_arcs(&self) -> Vec<arc::Kind> {
let mut arcs = vec![];
for &(tr, w) in self.consumed_by.iter() {
arcs.push(arc::Kind::Consume(self.id, tr, w))
}
for &(tr, w) in self.produced_by.iter() {
arcs.push(arc::Kind::Produce(self.id, tr, w))
}
arcs
}
}