libpetri-core 1.3.5

Core types for libpetri Coloured Time Petri Net engine
Documentation

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

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

Arc Types

Arc Module Semantics
Input [input] Consume tokens (one, exactly N, at least N, all)
Output [output] Produce tokens (single, AND-fork, XOR-split, timeout)
Inhibitor [arc] Block firing when place has tokens
Read [arc] Require token without consuming
Reset [arc] Clear all tokens from place on firing

Timing Modes

Mode Interval Factory
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);