Skip to main content

libpetri_core/
arc.rs

1use crate::place::{Place, PlaceRef};
2
3/// Inhibitor arc: blocks transition if place has tokens.
4#[derive(Debug, Clone, PartialEq, Eq, Hash)]
5pub struct Inhibitor {
6    pub place: PlaceRef,
7}
8
9/// Read arc: requires token without consuming.
10#[derive(Debug, Clone, PartialEq, Eq, Hash)]
11pub struct Read {
12    pub place: PlaceRef,
13}
14
15/// Reset arc: removes all tokens from place when firing.
16#[derive(Debug, Clone, PartialEq, Eq, Hash)]
17pub struct Reset {
18    pub place: PlaceRef,
19}
20
21/// Creates an inhibitor arc for the given place.
22pub fn inhibitor<T: 'static>(place: &Place<T>) -> Inhibitor {
23    Inhibitor {
24        place: place.as_ref(),
25    }
26}
27
28/// Creates a read arc for the given place.
29pub fn read<T: 'static>(place: &Place<T>) -> Read {
30    Read {
31        place: place.as_ref(),
32    }
33}
34
35/// Creates a reset arc for the given place.
36pub fn reset<T: 'static>(place: &Place<T>) -> Reset {
37    Reset {
38        place: place.as_ref(),
39    }
40}