Teuchos_TableFormat.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include "Teuchos_TableFormat.hpp"
00031 #include "Teuchos_Assert.hpp"
00032
00033
00034 namespace Teuchos {
00035
00036
00037 std::string TableFormat::thinline() const
00038 {
00039 std::ostringstream toss;
00040 for (int i=0; i<pageWidth_; i++)
00041 {
00042 toss << "-";
00043 }
00044 return toss.str();
00045 }
00046
00047
00048
00049 std::string TableFormat::thickline() const
00050 {
00051 std::ostringstream toss;
00052 for (int i=0; i<pageWidth_; i++)
00053 {
00054 toss << "=";
00055 }
00056 return toss.str();
00057 }
00058
00059
00060 std::string TableFormat::blanks(int size) const
00061 {
00062 std::ostringstream toss;
00063 for (int i=0; i<size; i++)
00064 {
00065 toss << " ";
00066 }
00067 return toss.str();
00068 }
00069
00070
00071 int TableFormat::computeRequiredColumnWidth(
00072 const std::string& name,
00073 const TableColumn& column
00074 ) const
00075 {
00076 int rtn = name.length();
00077
00078 for (int i=0; i<column.numRows(); i++)
00079 {
00080 int x = column.entry(i)->toString().length();
00081 rtn = std::max(rtn, x);
00082 }
00083
00084 return rtn + columnSpacing_;
00085 }
00086
00087
00088 void TableFormat::writeRow(
00089 std::ostream& out,
00090 const Array<RCP<TableEntry> >& entries
00091 ) const
00092 {
00093 TEST_FOR_EXCEPT(entries.size() != columnWidths_.size()
00094 && columnWidths_.size() != 0);
00095
00096 for (unsigned int i=0; i<entries.size(); i++)
00097 {
00098 int cw = defaultColumnWidth();
00099 if (columnWidths_.size() != 0) cw = columnWidths_[i];
00100
00101 out << std::left << std::setw(cw) << entries[i]->toString();
00102 }
00103 out << std::endl;
00104 }
00105
00106
00107 void TableFormat::writeRow(
00108 std::ostream& out,
00109 int rowIndex,
00110 const Array<TableColumn>& columns
00111 ) const
00112 {
00113 Array<RCP<TableEntry> > entries(columns.size());
00114 for (unsigned int i=0; i<columns.size(); i++)
00115 {
00116 entries[i] = columns[i].entry(rowIndex);
00117 }
00118
00119 writeRow(out, entries);
00120 }
00121
00122
00123 void TableFormat::writeWholeTable(
00124 std::ostream& out,
00125 const std::string& header,
00126 const Array<std::string>& columnNames,
00127 const Array<TableColumn>& columns
00128 ) const
00129 {
00130
00131
00132 int pgWidth = 0;
00133 for (unsigned int i=0; i<columnNames.size(); i++)
00134 {
00135 int cw = defaultColumnWidth();
00136 if (columnWidths_.size() != 0) cw = columnWidths_[i];
00137 pgWidth += cw;
00138 }
00139 setPageWidth(std::max(pageWidth_, pgWidth));
00140
00141
00142 out << thickline() << std::endl;
00143 out << std::endl;
00144 int numBlanks = (pageWidth_ - header.length())/2;
00145 out << blanks(numBlanks) << header << std::endl;
00146 out << std::endl;
00147
00148
00149 for (unsigned int i=0; i<columnNames.size(); i++)
00150 {
00151 int cw = defaultColumnWidth();
00152 if (columnWidths_.size() != 0) cw = columnWidths_[i];
00153
00154 out << std::left << std::setw(cw) << columnNames[i];
00155 }
00156 out << std::endl;
00157
00158
00159 int numRows = columns[0].numRows();
00160 for (unsigned int i=1; i<columns.size(); i++)
00161 {
00162 TEUCHOS_ASSERT_EQUALITY(columns[i].numRows(), numRows);
00163 }
00164
00165
00166 for (int i=0; i<numRows; i++)
00167 {
00168 if (i % lineInterval_ == 0)
00169 out << std::left << thinline() << std::endl;
00170 writeRow(out, i, columns);
00171 }
00172
00173
00174 out << thickline() << std::endl;
00175
00176 }
00177
00178
00179 }