public void localQueueFairnessChecking(object o) { int order = (int)o; while (true) { if (isStop) { return; } while (SCCQueueArray[order].Count > 0) { if (isStop) { return; } SCCInformation SCC = null; SCCQueueArray[order].TryDequeue(out SCC); Dictionary <string, LocalPair> fairSCC = IsFair(SCC.newSCC, SCC.newOutgoingTransitionTable); if (fairSCC != null) { localTarjanFairnessReport(SCC.newSCC, SCC.newCallStack, SCC.newOutgoingTransitionTable); return; } } } }
private void localQueueSCC(int order, Dictionary <string, LocalPair> newSCC, Stack <LocalPair> callStack, Dictionary <string, List <string> > outgoingTransitionTable) { //if (isStop) //{ // return; //} // copy callStack Stack <LocalPair> newCallStack = new Stack <LocalPair>(callStack.Count); LocalPair[] callStackArray = callStack.ToArray(); for (int i = callStackArray.Length - 1; i >= 0; i--) { newCallStack.Push(callStackArray[i]); } // copy outgoing transition table Dictionary <string, List <string> > newOutgoingTransitionTable = new Dictionary <string, List <string> >(1024); foreach (KeyValuePair <string, LocalPair> kv in newSCC) { string s = kv.Key; newOutgoingTransitionTable.Add(s, outgoingTransitionTable[s]); } // create & queue SCC information SCCInformation SCC = new SCCInformation(newSCC, newCallStack, newOutgoingTransitionTable); SCCQueueArray[order].Enqueue(SCC); }