42 #ifndef TEUCHOS_TABULAR_OUTPUTTER_HPP 43 #define TEUCHOS_TABULAR_OUTPUTTER_HPP 69 enum { numFieldTypes = 3 };
73 enum { numFieldJustifications = 2 };
77 enum { numFloatingOutputTypes = 2 };
107 void pushFieldSpec(
const std::string &fieldName,
118 void setFieldTypePrecision(
const EFieldType fieldType,
const int prec );
125 void outputField(
const T& t );
128 void nextRow(
const bool allowRemainingFields =
false);
138 const int outputWidth_in
140 :fieldName(fieldName_in), fieldType(fieldType_in),
141 fieldJustification(fieldJustification_in),
142 floatingOutputType(floatingOutputType_in),
143 outputWidth(outputWidth_in),
160 #pragma warning(push) 161 #pragma warning(disable:4251) 181 return ( time_in > 0.0 ? time_in : -1.0 );
190 numLoops_ = numLoops;
199 const double relTime =
214 #define TEUCHOS_START_PERF_OUTPUT_TIMER(OUTPUTTER, NUMLOOPS) \ 215 (OUTPUTTER).startTimer(NUMLOOPS); \ 216 for ( int k = 0; k < (NUMLOOPS); ++k ) 220 #define TEUCHOS_START_PERF_OUTPUT_TIMER_INNERLOOP(OUTPUTTER, NUMLOOPS, NUMINNERLOOPS) \ 221 (OUTPUTTER).startTimer((NUMLOOPS)*(NUMINNERLOOPS)); \ 222 for ( int k = 0; k < (NUMLOOPS); ++k ) 226 #define TEUCHOS_START_PERF_OUTPUT_TIMER_INNERLOOP(OUTPUTTER, NUMLOOPS, NUMINNERLOOPS) \ 227 (OUTPUTTER).startTimer((NUMLOOPS)*(NUMINNERLOOPS)); \ 228 for ( int k = 0; k < (NUMLOOPS); ++k ) 234 #define TEUCHOS_END_PERF_OUTPUT_TIMER(OUTPUTTER, VARNAME) \ 235 const double VARNAME = (OUTPUTTER).stopTimer(); \ 236 (OUTPUTTER).outputField(VARNAME) 254 "Error, you can not output a field until you print the header with" 260 "Error, you have already output all of the " 261 <<
fieldSpecs_.size() <<
" fields for this tabular output." 262 " You must call nextRow() before outputting to the next row." 270 switch(fieldSpec.fieldJustification) {
282 switch(fieldSpec.floatingOutputType) {
284 *
out_ << std::scientific;
294 *
out_ << setw(fieldSpec.outputWidth) << t;
305 #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)
void reset()
Reset the cummulative time and call count.
Utility class that makes it easy to create formatted tables of output.
EFieldJustification fieldJustification
void start(bool reset=false)
Start the timer, if the timer is enabled (see disable()).
double stop()
Stop the timer, if the timer is enabled (see disable()).
#define TEUCHOSCORE_LIB_DLL_EXPORT
double totalElapsedTime(bool readCurrentTime=false) const
The total time in seconds accumulated by this timer.
Templated array class derived from the STL std::vector.
static const std::string fieldSpacer_
Smart reference counting pointer class for automatic garbage collection.
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_