private List <TCellGroup> SubQueryRowsToCellGroups(SubQueryOutput <ShapeSheet.CellData> subquery_output) { var list_celldata = subquery_output.Rows.Select(row => this.CellDataToCellGroup(row.Cells)); var cellgroups = new List <TCellGroup>(subquery_output.Rows.Count); cellgroups.AddRange(list_celldata); return(cellgroups); }
private Output <T> _create_output_for_shape <T>(short shapeid, T[] values, List <SubQuerySectionDetails> subqueries_details, ref int values_cursor) { int old_cursor = values_cursor; var output = new Output <T>(shapeid); // First Copy the Query Cell Values into the output output.Cells = new T[this.Cells.Count]; for (int i = 0; i < this.Cells.Count; i++) { output.Cells[i] = values[values_cursor++]; } // Now copy the Section values over if (subqueries_details != null) { output.Sections = new List <SubQueryOutput <T> >(subqueries_details.Count); foreach (var subquery_detail in subqueries_details) { var subquery_output = new SubQueryOutput <T>(subquery_detail.RowCount); int num_cols = subquery_detail.SubQuery.Columns.Count; foreach (int row_index in subquery_detail.RowIndexes) { var row_values = new T[num_cols]; for (int col_index = 0; col_index < num_cols; col_index++) { row_values[col_index] = values[values_cursor++]; } var sec_res_row = new SubQueryOutputRow <T>(row_values); subquery_output.Rows.Add(sec_res_row); } output.Sections.Add(subquery_output); } } int num_cells = this.Cells.Count + (subqueries_details == null ? 0 : subqueries_details.Select(x => x.RowCount * x.SubQuery.Columns.Count).Sum()); int expected_cursor = old_cursor + num_cells; if (expected_cursor != values_cursor) { throw new InternalAssertionException("Unexpected cursor"); } return(output); }