42 #ifndef TEUCHOS_TABULAR_OUTPUTTER_HPP 43 #define TEUCHOS_TABULAR_OUTPUTTER_HPP 46 #include "Teuchos_FancyOStream.hpp" 48 #include "Teuchos_Tuple.hpp" 51 #include "Teuchos_Exceptions.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);
135 FieldSpec(std::string fieldName_in,
EFieldType fieldType_in,
138 const int outputWidth_in
140 :fieldName(fieldName_in), fieldType(fieldType_in),
141 fieldJustification(fieldJustification_in),
142 floatingOutputType(floatingOutputType_in),
143 outputWidth(outputWidth_in),
146 std::string fieldName;
156 static const std::string fieldSpacer_;
160 #pragma warning(push) 161 #pragma warning(disable:4251) 179 double adjustTime(
const double &time_in )
181 return ( time_in > 0.0 ? time_in : -1.0 );
186 void startTimer(
const int numLoops)
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" 258 !(currFieldIdx_ < as<int>(fieldSpecs_.size())),
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." 266 FieldSpec &fieldSpec = fieldSpecs_[currFieldIdx_];
268 *out_ << fieldSpacer_ << std::setprecision(fieldSpec.precision);
270 switch(fieldSpec.fieldJustification) {
282 switch(fieldSpec.floatingOutputType) {
284 *out_ << std::scientific;
294 *out_ << setw(fieldSpec.outputWidth) << t;
305 #endif // TEUCHOS_TABULAR_OUTPUTTER_HPP 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.
void reset()
Reset the cummulative time and call count.
Utility class that makes it easy to create formatted tables of output.
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()).
Templated array class derived from the STL std::vector.
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos, as well as a number of utility routines.
double totalElapsedTime(bool readCurrentTime=false) const
The total time in seconds accumulated by this timer.
Smart reference counting pointer class for automatic garbage collection.
Base exception class for Teuchos.
Reference-counted pointer class and non-member templated function implementations.
#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...