private void AnalyzeMarkingState() { foreach (int legalMarking in this.m_Reachability.LegalMarkings) { Marking m = this.m_Reachability.GetMarkingFromMarkingName(legalMarking); foreach (int t in this.m_Reachability.TransitionNames) { if (!this.m_TGoodMarkings.ContainsKey(t)) { this.m_TGoodMarkings.Add(t, new HashSet <int>()); } if (m.CanFireTransition(t)) { int nextM = this.m_Reachability.Graph[legalMarking][t]; if (this.m_Reachability.LegalMarkings.Contains(nextM)) { this.m_TGoodMarkings[t].Add(legalMarking); if (!this.m_TEnabledGoodMarkings.ContainsKey(t)) { this.m_TEnabledGoodMarkings.Add(t, new HashSet <int>()); } this.m_TEnabledGoodMarkings[t].Add(legalMarking); } else { if (!this.m_TDangerousMarkings.ContainsKey(t)) { this.m_TDangerousMarkings.Add(t, new HashSet <int>()); } this.m_TDangerousMarkings[t].Add(legalMarking); if (!this.m_TCriticalMTSIs.ContainsKey(t)) { this.m_TCriticalMTSIs.Add(t, new HashSet <int>()); } this.m_TCriticalMTSIs[t].Add(legalMarking); } } else { this.m_TGoodMarkings[t].Add(legalMarking); if (!this.m_TDisabledGoodMarkings.ContainsKey(t)) { this.m_TDisabledGoodMarkings.Add(t, new HashSet <int>()); } this.m_TDisabledGoodMarkings[t].Add(legalMarking); } } } }