00001
00002
00003
00004
00005
00006
00007
00008
00009
00010 #ifndef MESSAGETOOLS_H
00011 #define MESSAGETOOLS_H
00012
00013 #include <iostream>
00014 #include <sstream>
00015 #include <algorithm>
00016 #ifndef __CINT__
00017 #include "otsdaq-core/MessageFacility/MessageFacility.h"
00018 #endif
00019 #include "otsdaq-core/Macros/CoutMacros.h"
00020
00021 #include "ANSIColors.h"
00022
00023 #define FATAL(MSG,COLOR) \
00024 { \
00025 std::stringstream msg_ ; \
00026 std::stringstream PFs_ ; \
00027 std::string PF_ = __PRETTY_FUNCTION__ ; \
00028 int PFSize = PF_.size() ; \
00029 int maxL = 90 ; \
00030 if(PFSize > 30) {PFSize = 30 ;} \
00031 for(int i=0; i<PFSize; ++i) {PFs_<<PF_[i];} \
00032 if(PFSize<(int)PF_.size()) \
00033 {maxL -= 3; PFs_<<ACRed<<"...";} \
00034 msg_ << ACCyan << ACBold \
00035 << __LINE__ \
00036 << ACPlain << ACYellow \
00037 << "\t] [" \
00038 << ACRed << ACBold << ACReverse \
00039 << "FATAL:" \
00040 << ACPlain \
00041 << ACWhite << ACBold \
00042 << " " \
00043 << PFs_.str() \
00044 << ACPlain << ACYellow \
00045 << "]" ; \
00046 int blankSize = maxL - msg_.str().size() + 1 ; \
00047 if( blankSize < 0 ) blankSize = 2 ; \
00048 std::string blanks = "" ; \
00049 for(int i=0; i<blankSize; ++i) \
00050 { \
00051 blanks += " " ; \
00052 } \
00053 std::cout << __COUT_HDR_FL__ << msg_.str() \
00054 << blanks \
00055 << COLOR << ACBold \
00056 << MSG \
00057 << ACPlain \
00058 << std::endl ; \
00059 }
00060
00061 #define STDLINE(MSG,COLOR) \
00062 { \
00063 std::stringstream msg_ ; \
00064 std::stringstream PFs_ ; \
00065 std::string PF_ = __PRETTY_FUNCTION__ ; \
00066 int PFSize = PF_.size() ; \
00067 int maxL = 90 ; \
00068 if(PFSize > 30) {PFSize = 30 ;} \
00069 for(int i=0; i<PFSize; ++i) {PFs_<<PF_[i];} \
00070 if(PFSize<(int)PF_.size()) \
00071 {maxL -= 4; PFs_<<ACRed<<"...";} \
00072 else \
00073 {PFs_<<ACPlain<<ACPlain<<ACPlain<<ACPlain;} \
00074 msg_ << ACCyan << ACBold \
00075 << __LINE__ \
00076 << ACPlain << ACYellow \
00077 << "\t] [" \
00078 << ACPlain \
00079 << ACWhite << ACBold \
00080 << PFs_.str() \
00081 << ACPlain << ACYellow \
00082 << "]" ; \
00083 int blankSize = maxL - msg_.str().size() + 1 ; \
00084 if( blankSize < 0 ) blankSize = 3 ; \
00085 std::string blanks = "" ; \
00086 for(int i=0; i<blankSize; ++i) \
00087 { \
00088 blanks += " " ; \
00089 } \
00090 std::cout << __COUT_HDR_FL__ << msg_.str() \
00091 << blanks \
00092 << COLOR << ACBold \
00093 << MSG \
00094 << ACPlain \
00095 << std::endl ; \
00096 }
00097
00098 #define STDSNAP(MSG,COLOR) \
00099 { \
00100 std::stringstream msg_ ; \
00101 std::stringstream PFs_ ; \
00102 std::string PF_ = __PRETTY_FUNCTION__ ; \
00103 int PFSize = PF_.size() ; \
00104 int maxL = 90 ; \
00105 if(PFSize > 30) {PFSize = 30 ;} \
00106 for(int i=0; i<PFSize; ++i) {PFs_<<PF_[i];} \
00107 if(PFSize<(int)PF_.size()) \
00108 {maxL -= 4; PFs_<<ACRed<<"...";} \
00109 msg_ << ACCR \
00110 << ACCyan << ACBold \
00111 << __LINE__ \
00112 << ACPlain << ACYellow \
00113 << "\t] [" \
00114 << ACPlain \
00115 << ACWhite << ACBold \
00116 << PFs_.str() \
00117 << ACPlain << ACYellow \
00118 << "]" ; \
00119 int blankSize = maxL - msg_.str().size() + 1 ; \
00120 if( blankSize < 0 ) blankSize = 3 ; \
00121 std::string blanks = "" ; \
00122 for(int i=0; i<blankSize; ++i) \
00123 { \
00124 blanks += " " ; \
00125 } \
00126 std::cout << __COUT_HDR_FL__ << msg_.str() \
00127 << blanks \
00128 << COLOR << ACBold \
00129 << MSG \
00130 << ACPlain \
00131 << std::flush ; \
00132 }
00133 namespace monicelli
00134 {
00135
00136 class Utils
00137 {
00138 public:
00139 Utils() {;}
00140
00141 inline static int toInt(std::string inputString)
00142 {
00143 std::istringstream iss_ ;
00144 iss_.str(inputString) ;
00145 int n ;
00146 iss_ >> n ;
00147
00148 return n ;
00149 }
00150
00151 inline static double toDouble(std::string inputString)
00152 {
00153 std::istringstream iss_ ;
00154 iss_.str(inputString) ;
00155 double n ;
00156 iss_ >> n ;
00157
00158 return n ;
00159 }
00160
00161 inline static int toDec(unsigned long long inputBinary)
00162 {
00163 std::stringstream ss ;
00164 ss.str("") ;
00165 int n = inputBinary ;
00166 ss << std::dec << n ;
00167 n = Utils::toInt(ss.str()) ;
00168
00169 return n ;
00170 }
00171
00172 } ;
00173 }
00174 #endif // MESSAGETOOLS_H