Skip to main content

Crate libpetri_core

Crate libpetri_core 

Source
Expand description

§libpetri-core — Core Types for Coloured Time Petri Nets

This crate defines the structural model: places, tokens, transitions, arcs, and timing constraints. It contains no execution logic — see libpetri-runtime for that.

§Concepts

TypeDescription
Place<T>Typed, named token container. Identity by name.
Token<T>Immutable value + timestamp.
TransitionConsumes/produces tokens via arcs. Optional timing and priority.
PetriNetImmutable net definition built via builder pattern.

§Arc Types

ArcTypes p_result result p_blocked blocked t_process process p_blocked->t_process p_source source p_source->t_process p_cleared cleared p_context context p_context->t_process read t_process->p_result t_process->p_cleared reset
ArcModuleSemantics
InputinputConsume tokens (one, exactly N, at least N, all)
OutputoutputProduce tokens (single, AND-fork, XOR-split, timeout)
InhibitorarcBlock firing when place has tokens
ReadarcRequire token without consuming
ResetarcClear all tokens from place on firing

§Timing Modes

TimingModes p_p0 p0 t_immediate immediate p_p0->t_immediate p_p5 p5 p_p1 p1 t_deadline deadline [0, 5000]ms p_p1->t_deadline p_p3 p3 t_window window [200, 5000]ms p_p3->t_window p_p4 p4 t_exact exact [3000, 3000]ms p_p4->t_exact p_p2 p2 t_delayed delayed [1000, ∞)ms p_p2->t_delayed t_immediate->p_p1 t_deadline->p_p2 t_delayed->p_p3 t_window->p_p4 t_exact->p_p5
ModeIntervalFactory
Immediate[0, ∞)timing::immediate()
Deadline[0, d]timing::deadline(ms)
Delayed[d, ∞)timing::delayed(ms)
Window[a, b]timing::window(a, b)
Exact[t, t]timing::exact(ms)

§Quick Example

use libpetri_core::place::Place;
use libpetri_core::token::Token;
use libpetri_core::transition::Transition;
use libpetri_core::petri_net::PetriNet;
use libpetri_core::input::one;
use libpetri_core::output::out_place;
use libpetri_core::action::fork;
use libpetri_core::timing::delayed;

let inbox = Place::<String>::new("inbox");
let outbox = Place::<String>::new("outbox");

let send = Transition::builder("send")
    .input(one(&inbox))
    .output(out_place(&outbox))
    .timing(delayed(100))
    .action(fork())
    .build();

let net = PetriNet::builder("mailer")
    .transition(send)
    .build();

assert_eq!(net.transitions().len(), 1);

Modules§

action
arc
context
input
output
petri_net
place
timing
token
transition