PlayaOut.hpp

00001 /* @HEADER@ */
00002 //   
00003 /* @HEADER@ */
00004 
00005 #ifndef PLAYA_OUT_HPP
00006 #define PLAYA_OUT_HPP
00007 
00008 #include "PlayaDefs.hpp"
00009 #include "Teuchos_Assert.hpp"
00010 #include "Teuchos_RefCountPtr.hpp"
00011 #include "Teuchos_FancyOStream.hpp"
00012 #include "PlayaMPIComm.hpp"
00013 
00014 namespace Teuchos
00015 {
00016 template <class T> class Array;
00017 }
00018 
00019 namespace Playa
00020 {
00021 class Tabs;
00022 using namespace Teuchos;
00023 
00028 class Out
00029 {
00030 public:
00031       
00033   static void println(const std::string& str) 
00034     {
00035       if (!suppressStdout()) os() << str << std::endl;
00036     }
00037 
00039   static std::ostream*& basicStream()
00040     {
00041       static std::ostream* rtn = &std::cout;
00042       return rtn;
00043     }
00044 
00046   static FancyOStream& os();
00047 
00050   static FancyOStream& root();
00051 
00053   static bool& suppressStdout() {static bool rtn=false; return rtn;}
00054 };
00055 
00056 
00058 void writeTable(std::ostream& os, const Tabs& tab,
00059   const Array<double>& a, int cols);
00061 void writeTable(std::ostream& os, const Tabs& tab, 
00062   const Array<int>& a, int cols);
00063 
00064 }
00065 
00066 #define PLAYA_OUT(test, msg) \
00067   { \
00068     if (test) \
00069     { \
00070       TeuchosOStringStream omsg; \
00071       omsg << msg; \
00072       Out::println(omsg.str());                 \
00073     } \
00074   }
00075 
00076 #define PLAYA_ROOT_OUT(test, msg) \
00077   { \
00078     if (test) \
00079     { \
00080       TeuchosOStringStream omsg; \
00081       omsg << msg; \
00082       Out::root() << omsg.str() << std::endl;                 \
00083     } \
00084   }
00085 
00086 
00087 #define PLAYA_VERB_EXTREME(msg) PLAYA_MSG4(this->verb(), msg)
00088 #define PLAYA_VERB_HIGH(msg) PLAYA_MSG3(this->verb(), msg)
00089 #define PLAYA_VERB_MEDIUM(msg) PLAYA_MSG2(this->verb(), msg)
00090 #define PLAYA_VERB_LOW(msg) PLAYA_MSG1(this->verb(), msg)
00091 
00092 #define PLAYA_HEADER_LINE "\n------------------------------------------------------------------\n"
00093 
00094 #define PLAYA_MSG(context, level, msg) PLAYA_OUT(this->verbLevel(context) >= level, msg)
00095 
00096 #define PLAYA_LEVEL1(context, msg) PLAYA_MSG(context, 1, msg)
00097 
00098 #define PLAYA_LEVEL2(context, msg) PLAYA_MSG(context, 2, msg)
00099 
00100 #define PLAYA_LEVEL3(context, msg) PLAYA_MSG(context, 3, msg)
00101 
00102 #define PLAYA_LEVEL4(context, msg) PLAYA_MSG(context, 4, msg)
00103 
00104 #define PLAYA_LEVEL5(context, msg) PLAYA_MSG(context, 5, msg)
00105 
00106 
00107 #define PLAYA_MSG1(level, msg) PLAYA_OUT(level >= 1, msg)
00108 
00109 #define PLAYA_MSG2(level, msg) PLAYA_OUT(level >= 2, msg)
00110 
00111 #define PLAYA_MSG3(level, msg) PLAYA_OUT(level >= 3, msg)
00112 
00113 #define PLAYA_MSG4(level, msg) PLAYA_OUT(level >= 4, msg)
00114 
00115 #define PLAYA_MSG5(level, msg) PLAYA_OUT(level >= 5, msg)
00116 
00117 
00118 
00119 #define PLAYA_ROOT_MSG1(level, msg) PLAYA_ROOT_OUT(level >= 1, msg)
00120 
00121 #define PLAYA_ROOT_MSG2(level, msg) PLAYA_ROOT_OUT(level >= 2, msg)
00122 
00123 #define PLAYA_ROOT_MSG3(level, msg) PLAYA_ROOT_OUT(level >= 3, msg)
00124 
00125 #define PLAYA_ROOT_MSG4(level, msg) PLAYA_ROOT_OUT(level >= 4, msg)
00126 
00127 #define PLAYA_ROOT_MSG5(level, msg) PLAYA_ROOT_OUT(level >= 5, msg)
00128 
00129 
00130 
00131 
00132 #define PLAYA_BANNER1(level, tab, msg) \
00133   PLAYA_ROOT_MSG1(level, tab \
00134     << "===================================================================");\
00135   PLAYA_ROOT_MSG1(level, tab << std::endl << tab \
00136     << "  " << msg); \
00137   PLAYA_ROOT_MSG1(level, tab << std::endl << tab\
00138     << "===================================================================");
00139 
00140 
00141 #define PLAYA_BANNER2(level, tab, msg) \
00142   PLAYA_ROOT_MSG2(level, tab \
00143     << "-------------------------------------------------------------------");\
00144   PLAYA_ROOT_MSG2(level, tab << msg); \
00145   PLAYA_MSG2(level, tab\
00146     << "-------------------------------------------------------------------");
00147 
00148 
00149 
00150 #define PLAYA_BANNER3(level, tab, msg) \
00151   PLAYA_ROOT_MSG3(level, tab \
00152     << "-------------------------------------------------------------------");\
00153   PLAYA_ROOT_MSG3(level, tab << std::endl << tab \
00154     << msg); \
00155   PLAYA_ROOT_MSG3(level, tab << std::endl << tab\
00156     << "-------------------------------------------------------------------");
00157 
00158 #endif

doxygen