10 #ifndef TEUCHOS_TABULAR_OUTPUTTER_HPP
11 #define TEUCHOS_TABULAR_OUTPUTTER_HPP
37 enum { numFieldTypes = 3 };
41 enum { numFieldJustifications = 2 };
45 enum { numFloatingOutputTypes = 2 };
75 void pushFieldSpec(
const std::string &fieldName,
86 void setFieldTypePrecision(
const EFieldType fieldType,
const int prec );
93 void outputField(
const T& t );
96 void nextRow(
const bool allowRemainingFields =
false);
106 const int outputWidth_in
108 :fieldName(fieldName_in), fieldType(fieldType_in),
109 fieldJustification(fieldJustification_in),
110 floatingOutputType(floatingOutputType_in),
111 outputWidth(outputWidth_in),
128 #pragma warning(push)
129 #pragma warning(disable:4251)
149 return ( time_in > 0.0 ? time_in : -1.0 );
158 numLoops_ = numLoops;
167 const double relTime =
168 adjustTime(timer_.totalElapsedTime()) / numLoops_;
182 #define TEUCHOS_START_PERF_OUTPUT_TIMER(OUTPUTTER, NUMLOOPS) \
183 (OUTPUTTER).startTimer(NUMLOOPS); \
184 for ( int k = 0; k < (NUMLOOPS); ++k )
188 #define TEUCHOS_START_PERF_OUTPUT_TIMER_INNERLOOP(OUTPUTTER, NUMLOOPS, NUMINNERLOOPS) \
189 (OUTPUTTER).startTimer((NUMLOOPS)*(NUMINNERLOOPS)); \
190 for ( int k = 0; k < (NUMLOOPS); ++k )
194 #define TEUCHOS_START_PERF_OUTPUT_TIMER_INNERLOOP(OUTPUTTER, NUMLOOPS, NUMINNERLOOPS) \
195 (OUTPUTTER).startTimer((NUMLOOPS)*(NUMINNERLOOPS)); \
196 for ( int k = 0; k < (NUMLOOPS); ++k )
202 #define TEUCHOS_END_PERF_OUTPUT_TIMER(OUTPUTTER, VARNAME) \
203 const double VARNAME = (OUTPUTTER).stopTimer(); \
204 (OUTPUTTER).outputField(VARNAME)
222 "Error, you can not output a field until you print the header with"
228 "Error, you have already output all of the "
229 <<
fieldSpecs_.size() <<
" fields for this tabular output."
230 " You must call nextRow() before outputting to the next row."
238 switch(fieldSpec.fieldJustification) {
250 switch(fieldSpec.floatingOutputType) {
252 *
out_ << std::scientific;
262 *
out_ << setw(fieldSpec.outputWidth) << t;
273 #endif // TEUCHOS_TABULAR_OUTPUTTER_HPP
EFloatingOutputType floatingOutputType
void outputField(const T &t)
Output to the next field.
Basic wall-clock timer class.
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
InvalidFieldOutputError(const std::string &what_arg)
double adjustTime(const double &time_in)
FieldSpec(std::string fieldName_in, EFieldType fieldType_in, EFieldJustification fieldJustification_in, EFloatingOutputType floatingOutputType_in, const int outputWidth_in)
Tuple< int, numFieldTypes > fieldTypePrecision_
void startTimer(const int numLoops)
Utility class that makes it easy to create formatted tables of output.
EFieldJustification fieldJustification
#define TEUCHOSCORE_LIB_DLL_EXPORT
Templated array class derived from the STL std::vector.
static const std::string fieldSpacer_
Base exception class for Teuchos.
Reference-counted pointer class and non-member templated function implementations.
MissingFieldsError(const std::string &what_arg)
#define TEUCHOS_TEST_FOR_EXCEPT(throw_exception_test)
This macro is designed to be a short version of TEUCHOS_TEST_FOR_EXCEPTION() that is easier to call...
InvalidFieldSpecError(const std::string &what_arg)
Replacement for std::vector that is compatible with the Teuchos Memory Management classes...
Array< FieldSpec > fieldSpecs_