/// <summary>
        /// Outputs the report as an ASCII table.
        /// </summary>
        /// <param name="report">  the report </param>
        /// <param name="out">  the output stream to write to </param>
        public virtual void writeAsciiTable(R report, Stream @out)
        {
            IList <Type> columnTypes = getColumnTypes(report);
            IList <AsciiTableAlignment> alignments = IntStream.range(0, columnTypes.Count).mapToObj(i => calculateAlignment(columnTypes[i])).collect(toImmutableList());
            IList <string> headers = report.ColumnHeaders;
            ImmutableList <ImmutableList <string> > cells = formatAsciiTable(report);
            string      asciiTable = AsciiTable.generate(headers, alignments, cells);
            PrintWriter pw         = new PrintWriter(new StreamWriter(@out, Encoding.UTF8));

            pw.println(asciiTable);
            pw.flush();
        }