internal SummaryTable(Summary summary) { Summary = summary; if (summary.HasCriticalValidationErrors) { Columns = new SummaryTableColumn[0]; ColumnCount = 0; FullHeader = new string[0]; FullContent = new string[0][]; FullContentStartOfGroup = new bool[0]; FullContentWithHeader = new string[0][]; return; } var configColumns = summary.Config. GetColumns(). Where(c => c.IsAvailable(summary)); var paramColumns = summary.Benchmarks. SelectMany(b => b.Parameters.Items.Select(item => item.Name)). Distinct(). Select(name => new ParamColumn(name)); var diagnoserColumns = summary.Config. GetDiagnosers(). Where(d => d is IColumnProvider). Cast<IColumnProvider>(). SelectMany(cp => cp.GetColumns); var columns = configColumns.Concat(paramColumns).Concat(diagnoserColumns).ToArray().OrderBy(c => c.Category).ToArray(); ColumnCount = columns.Length; FullHeader = columns.Select(c => c.ColumnName).ToArray(); var orderProvider = summary.Config.GetOrderProvider() ?? DefaultOrderProvider.Instance; FullContent = summary.Reports.Select(r => columns.Select(c => c.GetValue(summary, r.Benchmark)).ToArray()).ToArray(); var groupKeys = summary.Benchmarks.Select(b => orderProvider.GetGroupKey(b, summary)).ToArray(); FullContentStartOfGroup = new bool[summary.Reports.Length]; if (groupKeys.Distinct().Count() > 1 && FullContentStartOfGroup.Length > 0) { FullContentStartOfGroup[0] = true; for (int i = 1; i < summary.Reports.Length; i++) FullContentStartOfGroup[i] = groupKeys[i] != groupKeys[i - 1]; } var full = new List<string[]> { FullHeader }; full.AddRange(FullContent); FullContentWithHeader = full.ToArray(); Columns = Enumerable.Range(0, columns.Length).Select(i => new SummaryTableColumn(this, i, columns[i].AlwaysShow)).ToArray(); }
internal SummaryTable(Summary summary) { Summary = summary; if (summary.HasCriticalValidationErrors) { Columns = new SummaryTableColumn[0]; ColumnCount = 0; FullHeader = new string[0]; FullContent = new string[0][]; FullContentStartOfGroup = new bool[0]; FullContentWithHeader = new string[0][]; IsDefault = new bool[0]; return; } var columns = summary.GetColumns(); ColumnCount = columns.Length; FullHeader = columns.Select(c => c.ColumnName).ToArray(); var orderProvider = summary.Config.GetOrderProvider() ?? DefaultOrderProvider.Instance; FullContent = summary.Reports.Select(r => columns.Select(c => c.GetValue(summary, r.Benchmark)).ToArray()).ToArray(); IsDefault = columns.Select(c => summary.Reports.All(r => c.IsDefault(summary, r.Benchmark))).ToArray(); var groupKeys = summary.Benchmarks.Select(b => orderProvider.GetGroupKey(b, summary)).ToArray(); FullContentStartOfGroup = new bool[summary.Reports.Length]; if (groupKeys.Distinct().Count() > 1 && FullContentStartOfGroup.Length > 0) { FullContentStartOfGroup[0] = true; for (int i = 1; i < summary.Reports.Length; i++) FullContentStartOfGroup[i] = groupKeys[i] != groupKeys[i - 1]; } var full = new List<string[]> { FullHeader }; full.AddRange(FullContent); FullContentWithHeader = full.ToArray(); Columns = Enumerable.Range(0, columns.Length).Select(i => new SummaryTableColumn(this, i, columns[i].AlwaysShow)).ToArray(); }