public void Process(PetriNet petriNet) { if (this.Status != MarkingNodeStatus.Boundary) return; // Marking is dublicate if (this.Graph.GetVertex(v => this.Compare(v as MarkingTreeNode) == 0 && this.Value != v.Value && (v as MarkingTreeNode).Status != MarkingNodeStatus.Boundary) != null ) { this.Status = MarkingNodeStatus.Dublicate; return; } // Marking is terminal Transition[] availableTransitions = petriNet.GetAvailableTransitions(this.Marking); if (availableTransitions.Length == 0) { this.Status = MarkingNodeStatus.Terminal; return; } foreach (MarkedTransition transition in availableTransitions) { (this.Tree as MarkingTree).AddMarking(petriNet.GetStateAfterExecute(this.Marking, transition), this.Value.ToString(), transition.Value.ToString()); } }