43 #include "Teuchos_TabularOutputter.hpp"
67 const std::string getFieldLine(
const int width)
70 line.append(width,
'-');
81 const std::string TabularOutputter::fieldSpacer_(
" ");
84 TabularOutputter::TabularOutputter(std::ostream &out):
107 out_ = fancyOStream(out);
112 const std::string &fieldName,
const EFieldType fieldType,
121 !(as<int>(fieldName.size()) <= width),
123 "Error, the length of the field name \""<<fieldName<<
"\"\n"
124 "is "<<fieldName.size()<<
" which is larger than the\n"
125 "specifically set field width "<<width<<
"!"
130 FieldSpec(fieldName, fieldType, fieldJustification, floatingOutputType,
131 TEUCHOS_MAX(as<int>(fieldName.size()), width)
140 fieldTypePrecision_[fieldType] = prec;
150 const int numFields = static_cast<int>(fieldSpecs_.
size());
155 "Error, you must add at least one field spec using pushFieldSpec(...)!"
160 for (
int i = 0; i < numFields; ++i) {
161 FieldSpec &fieldSpec = fieldSpecs_[i];
162 const EFieldType fieldType = fieldSpec.fieldType;
163 const int fieldTypePrecision = fieldTypePrecision_[fieldType];
164 fieldSpec.precision = fieldTypePrecision;
165 const int fieldPrecisionWidth =
166 getFieldWidth(fieldType, fieldTypePrecision);
167 if (fieldSpec.outputWidth < fieldPrecisionWidth) {
168 fieldSpec.outputWidth = fieldPrecisionWidth;
170 *out_ << fieldSpacer_ << left << setw(fieldSpec.outputWidth) << fieldSpec.fieldName;
174 for (
int i = 0; i < numFields; ++i) {
175 const FieldSpec &fieldSpec = fieldSpecs_[i];
176 *out_ << fieldSpacer_ << left << setw(fieldSpec.outputWidth) << getFieldLine(fieldSpec.outputWidth);
187 const int numFields = static_cast<int>(fieldSpecs_.
size());
188 if (allowRemainingFields) {
189 while (currFieldIdx_ < numFields) {
196 !(currFieldIdx_ == numFields),
198 "Error, you must call outputField(...) for every field in the row\n"
199 "before you call nextRow()!"
211 void TabularOutputter::initialize()
213 std::fill( fieldTypePrecision_.
begin(), fieldTypePrecision_.
end(), 4 );