10#ifndef TEUCHOS_TABULAR_OUTPUTTER_HPP 
   11#define TEUCHOS_TABULAR_OUTPUTTER_HPP 
   14#include "Teuchos_FancyOStream.hpp" 
   16#include "Teuchos_Tuple.hpp" 
   19#include "Teuchos_Exceptions.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 );
 
  114    std::string fieldName;
 
  115    EFieldType fieldType;
 
  116    EFieldJustification fieldJustification;
 
  117    EFloatingOutputType floatingOutputType;
 
  124  static const std::string fieldSpacer_;
 
  129#pragma warning(disable:4251) 
  131  Array<FieldSpec> fieldSpecs_;
 
  132  RCP<FancyOStream> out_;
 
  133  Tuple<int,numFieldTypes> fieldTypePrecision_;
 
  147  double adjustTime( 
const double &time_in )
 
  149      return ( time_in > 0.0 ? time_in : -1.0 );
 
  154  void startTimer(
const int numLoops)
 
  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" 
  226    !(currFieldIdx_ < 
as<int>(fieldSpecs_.size())),
 
  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." 
  234  FieldSpec &
fieldSpec = fieldSpecs_[currFieldIdx_];
 
  236  *out_ << fieldSpacer_ << std::setprecision(
fieldSpec.precision);
 
  252      *out_ << std::scientific;
 
 
Templated array class derived from the STL std::vector.
 
Reference-counted pointer class and non-member templated function implementations.
 
Basic wall-clock timer class.
 
Base exception class for Teuchos.
 
Smart reference counting pointer class for automatic garbage collection.
 
Utility class that makes it easy to create formatted tables of output.
 
void outputField(const T &t)
Output to the next field.
 
#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.
 
#define TEUCHOS_TEST_FOR_EXCEPTION(throw_exception_test, Exception, msg)
Macro for throwing an exception with breakpointing to ease debugging.
 
The Teuchos namespace contains all of the classes, structs and enums used by Teuchos,...