00001
00002
00003
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
00024
00025
00026
00027
00028 class Out
00029 {
00030 public:
00031
00032
00033 static void println(const std::string& str)
00034 {
00035 if (!suppressStdout()) os() << str << std::endl;
00036 }
00037
00038
00039 static std::ostream*& basicStream()
00040 {
00041 static std::ostream* rtn = &std::cout;
00042 return rtn;
00043 }
00044
00045
00046 static FancyOStream& os();
00047
00048
00049
00050 static FancyOStream& root();
00051
00052
00053 static bool& suppressStdout() {static bool rtn=false; return rtn;}
00054 };
00055
00056
00057
00058 void writeTable(std::ostream& os, const Tabs& tab,
00059 const Array<double>& a, int cols);
00060
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