Exemple #1
0
        private void CreateRowLabel(IOutputCell <T> rowLabel, int colLength)
        {
            var outTxt = Center(ConcatenateKeyPairs(rowLabel != null
        ? rowLabel.Row : new KeyValuePair <string, string>[] { }), colLength);

            Console.Write(outTxt);
        }
Exemple #2
0
        private IEnumerable <int> GetLengthsOfContent(IOutputCell <T> cell)
        {
            if (cell == null)
            {
                yield return(0);
            }
            else
            {
                switch (cell.CellType)
                {
                case OutputCellType.COLUMN_LABEL:
                    foreach (var value in cell.Column)
                    {
                        yield return(value.Key.Length);

                        yield return(value.Value.Length);
                    }
                    break;

                case OutputCellType.ROW_LABEL:
                    foreach (var value in cell.Row)
                    {
                        yield return(value.Key.Length);

                        yield return(value.Value.Length);
                    }
                    break;

                case OutputCellType.DATA:
                    foreach (var value in cell)
                    {
                        yield return(value.Value.ToString().Length);
                    }
                    break;
                }
            }
        }
        private IEnumerable <IOutputCell <T>[]> LayerByRow(IEnumerable <IOutputCell <T> > cells, Query <T> query)
        {
            var ocells       = cells.OrderBy(x => x.YCoords, _allKeysComparer).ToArray();
            var colsSegments = ocells.Select(x => x.XCoords).Distinct(_pairsEqualityComparer).ToArray();
            var rowSegments  = ocells.Select(x => x.YCoords).Distinct(_pairsEqualityComparer).ToArray();

            if (query.Axis.HasColumns)
            {
                var columns = GetColumnCells(colsSegments, query);

                yield return(columns.ToArray());
            }

            var index = 0;

            if (query.Axis.HasColumns && query.Axis.HasRows)
            {
                foreach (var row in rowSegments)
                {
                    var values = new IOutputCell <T> [colsSegments.Length + 1];

                    values[0] = GetRowCell(row, query);

                    for (var i = 0; i < colsSegments.Length; i++)
                    {
                        if (index >= ocells.Length)
                        {
                            break;
                        }

                        var cell = ocells[index];

                        if (_pairsEqualityComparer.Equals(cell.YCoords, row))
                        {
                            var cindex = Array.FindIndex(colsSegments, x => _pairsEqualityComparer.Equals(x, cell.XCoords));

                            if (cindex >= 0)
                            {
                                values[cindex + 1] = cell;
                                index++;
                            }
                        }
                    }

                    yield return(values);
                }
            }

            if (query.Axis.HasColumns && !query.Axis.HasRows)
            {
                var values = new IOutputCell <T> [colsSegments.Length + 1];

                values[0] = GetMeasureCell(query.MeasuresOrMetrics, OutputCellType.ROW_LABEL);

                for (var i = 0; i < colsSegments.Length; i++)
                {
                    if (index >= ocells.Length)
                    {
                        break;
                    }

                    var cell   = ocells[index];
                    var cindex = Array.FindIndex(colsSegments, x => _pairsEqualityComparer.Equals(x, cell.XCoords));

                    if (cindex >= 0)
                    {
                        values[cindex + 1] = cell;
                        index++;
                    }
                }

                yield return(values);
            }

            if (!query.Axis.HasColumns && query.Axis.HasRows)
            {
                var header = new IOutputCell <T> [2];

                header[1] = GetMeasureCell(query.MeasuresOrMetrics, OutputCellType.COLUMN_LABEL);

                yield return(header);

                foreach (var row in rowSegments)
                {
                    var values = new IOutputCell <T> [2];

                    values[0] = GetRowCell(row, query);

                    var cell = ocells[index];

                    if (_pairsEqualityComparer.Equals(cell.YCoords, row))
                    {
                        values[1] = cell;
                        index++;
                    }

                    yield return(values);
                }
            }
        }