private void SortPrevSteps(LcdStep step) { if (step.HasJoins && step.Joins.Count > 1) { step.Joins.Sort(this.ComparePath); } }
private LcdStep GetNonPathNextStep(Process proc, LcdStep step, Dictionary <string, LcdStep> traversed) { SortedList <string, LcdStep> steps = new SortedList <string, LcdStep>(); foreach (LcdStep it in proc.Steps) { if (traversed.ContainsKey(it.StepID)) { continue; } if (this.CompareSteps(step, it) < 0) { steps.Add(it.StepID, it); } if (steps.Count > 0) { return(steps.Values[0]); } } return(null); }
private void FixRoute(Process proc) { LcdStep step = proc.FirstStep as LcdStep; //무한루프 방지(동일Process안에 Key인 동일 StepID가 존재하면 Key를 변경필요(그럴일 없겠지만) Dictionary <string, LcdStep> traversed = new Dictionary <string, LcdStep>(); while (step != null) { LcdStep next = GetNonPathNextStep(proc, step, traversed); if (next == null) { break; } new PrpPath(step, next, PrpPathType.Pass, 1); while (next != null) { if (traversed.ContainsKey(step.StepID)) { Logger.MonitorInfo("!!!!!!!!! Error Check ProcStep : ProcessID:{0}/ StepID:{1}", proc.ProcessID, step.StepID); return; } else { traversed.Add(step.StepID, step); } step = next; next = step.NextStep as LcdStep; } } }
private static int HasNext(LcdStep x) { if (x.NextStep == null) { return(1); } return(0); }
private void InitializeRoute(Process proc) { LcdStep step = proc.FirstStep as LcdStep; if (step == null) { return; } int index = 0; Dictionary <LcdStep, object> traversed = new Dictionary <LcdStep, object>(); traversed.Add(step, null); LcdStep prev = null; while (step != null) { if (step.StepType == "MAIN") { step.Sequence = index++; } else { step.Sequence = -1; } prev = step; step = step.NextStep as LcdStep; if (step != null) { if (traversed.ContainsKey(step)) { // remove endless loop link ? step.Splits.Clear(); break; } traversed.Add(step, null); } } foreach (LcdStep it in proc.Steps) { SortPrevSteps(it); } }
public static int CompareSteps(LcdStep x, LcdStep y) { int cmp = x.Sequence.CompareTo(y.Sequence); if (cmp == 0) { cmp = HasNext(x).CompareTo(HasNext(y)); } if (cmp == 0) { cmp = x.StepID.CompareTo(y.StepID); } return(cmp); }
private void AddStep(Process process, LcdStep step, Dictionary <LcdStep, LcdStep> traversed) { if (traversed.ContainsKey(step)) { return; } process.RootActivity.Steps.Add(step); traversed.Add(step, step); if (step.HasSplits == false) { return; } foreach (PrpPath path in step.Splits) { AddStep(process, path.ToStep as LcdStep, traversed); } }
private int ComparePath(Mozart.SeePlan.DataModel.Transition a, Mozart.SeePlan.DataModel.Transition b) { if (object.ReferenceEquals(a, b)) { return(0); } PrpPath x = (PrpPath)a; PrpPath y = (PrpPath)b; int cmp = x.Type.CompareTo(y.Type); if (cmp == 0) { LcdStep xStep = x.Step as LcdStep; LcdStep yStep = y.Step as LcdStep; cmp = this.ComparePrevSteps(xStep, yStep); } return(cmp); }
public static int ComparePrevSteps(LcdStep x, LcdStep y) { return(x.Sequence.CompareTo(y.Sequence)); }
private int CompareStepSeq(LcdStep x, LcdStep y) { return(CompareSteps(x, y)); }