public static void BuildScanLevels(List <ScanLevel> levels) { var level1 = new List <ScanLevel>(); var ms2count = levels.Count(m => m.Level == 2); var ms3count = levels.Count(m => m.Level == 3); var one_ms2_multiple_ms3 = ms3count > ms2count; var level3Count = -1; ScanLevel last = null; foreach (var level in levels) { switch (level.Level) { case 1: level1.Add(level); level3Count = -1; break; case 2: level.Parent = level1.Last(); break; case 3: level3Count++; if (one_ms2_multiple_ms3) { level.Parent = level1.Last().Children.Last(); } else { level.Parent = level1.Last().Children[level3Count]; } break; default: if (last.Level == level.Level) { level.Parent = last.Parent; } else { level.Parent = last; } break; } last = level; } }
public override List <ScanLevel> GetScanLevels(IRawFile rawFile) { var result = GetRawScanLevels(rawFile); var level3Count = -1; ScanLevel lastLevel1 = null; for (int i = 0; i < result.Count; i++) { var level = result[i]; switch (level.Level) { case 1: lastLevel1 = level; level3Count = -1; break; case 2: level.Parent = lastLevel1; break; case 3: level3Count++; level.Parent = lastLevel1.Children[level3Count]; break; default: var masterlevel = level.Level - 1; for (int j = i - 1; j >= 0; j--) { if (result[j].Level == masterlevel) { level.Parent = result[j]; break; } } break; } } return(result); }