pns 0.18.3

A simple and efficient library wrapper for simulating a minimal form of petri nets
Documentation
use crate::{
    FireChanges, TransitionList, TransitionView,
    sys::types::{Net, State},
};

unsafe extern "C" {
    pub(crate) fn pnsCreateState(state: *mut State, net: *const Net);
    pub(crate) fn pnsCloneState(state_clone: *mut State, state: *const State, net: *const Net);
    pub(crate) fn pnsLoadState(
        state: *mut State,
        net: *const Net,
        count: usize,
        values: *const u32,
    ) -> bool;
    pub(crate) fn pnsDestroyState(state: *mut State);

    pub(crate) fn pnsState_transitions<'a>(state: *const State) -> TransitionView<'a>;
    pub(crate) fn pnsState_transitions_backward<'a>(state: *const State) -> TransitionView<'a>;
    pub(crate) fn pnsState_changedTransitions(state: *mut State) -> FireChanges;
    pub(crate) fn pnsState_changedTransitions_backward(state: *mut State) -> FireChanges;

    pub(crate) fn pnsState_fire(state: *mut State, net: *const Net, tid: usize);
    pub(crate) fn pnsState_fire_backward(state: *mut State, net: *const Net, tid: usize);

    pub(crate) fn pnsState_refresh(state: *mut State, net: *const Net);

    pub(crate) fn pnsTransitionView_next(view: *mut TransitionView, tid: *mut usize) -> bool;
    pub(crate) fn pnsDestroyTransitionList(list: *mut TransitionList);
    pub(crate) fn pnsTransitionList_next(list: *mut TransitionList, tid: *mut usize) -> bool;
}