UNPKG

pm4js

Version:

Process Mining for Javascript

39 lines (37 loc) 1.06 kB
class PetriNetReachableVisibleTransitions { static apply(net, marking) { let reachableVisibleTransitions = {}; let visited = {}; let toVisit = []; toVisit.push(marking); while (toVisit.length > 0) { //console.log(reachableVisibleTransitions); let currMarking = toVisit.shift(); if (currMarking in visited) { continue; } visited[currMarking] = 0; let enabledTransitions = currMarking.getEnabledTransitions(); for (let trans of enabledTransitions) { if (trans.label != null) { reachableVisibleTransitions[trans.label] = 0; } else { let newMarking = currMarking.execute(trans); if (!(newMarking in visited)) { toVisit.push(newMarking); } } } } return Object.keys(reachableVisibleTransitions); } } try { module.exports = {PetriNetReachableVisibleTransitions: PetriNetReachableVisibleTransitions}; global.PetriNetReachableVisibleTransitions = PetriNetReachableVisibleTransitions; } catch (err) { //console.log(err); // not in Node }