otsdaq  3.03.00
CoutMacros.h
1 #ifndef _ots_Cout_Macros_h_
2 #define _ots_Cout_Macros_h_
3 
4 // clang-format off
5 
6 #include <string.h> //for strstr (not the same as <string>)
7 #include <iostream> //for cout
8 #include <sstream> //for stringstream, std::stringbuf
9 
10 #define TRACEMF_USE_VERBATIM 1 //for trace longer path filenames
11 #include "TRACE/tracemf.h"
12 
15 #define __SHORTFILE__ (__builtin_strstr(&__FILE__[0], "/srcs/") ? __builtin_strstr(&__FILE__[0], "/srcs/") + 6 : __FILE__)
16 
18 #define __FILENAME__ (__builtin_strrchr(__FILE__, '/') ? __builtin_strrchr(__FILE__, '/') + 1 : __FILE__)
19 
20 #define __E__ std::endl
21 
22 #define __THROW__(X) throw std::runtime_error(X)
23 
27 #define __MF_SUBJECT__ __FILENAME__ // default subject.. others can #undef and re-#define
30 #define QQQQ(X) #X
31 #define QUOTE(X) QQQQ(X)
32 //#define __MF_TYPE__(X) FIXME ?? how to do this ...(__ENV__("OTSDAQ_USING_MF")=="1"?
35 #define __COUT_HDR_F__ __SHORTFILE__ << ""
36 #define __COUT_HDR_L__ ":" << std::dec << __LINE__ << " |\t"
37 #define __COUT_HDR_P__ __PRETTY_FUNCTION__ << "\t"
38 #define __COUT_HDR_FL__ __SHORTFILE__ << "" << __COUT_HDR_L__
39 #define __COUT_HDR_FP__ __SHORTFILE__ << ":" << __COUT_HDR_P__
40 #define __COUT_HDR__ ""//__COUT_HDR_FL__
41 
43 #define __MF_DECOR__ (__MF_SUBJECT__)
44 #define __MF_TYPE__(X) TLOG(X, __MF_DECOR__)
45 
46 #ifndef __COUT_TO_STD__
47 #define __COUT_TYPE__(X) __MF_TYPE__(X)
48 #else
49 #define __COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __MF_DECOR__ << ": " << __COUT_HDR_FL__
50 #endif
51 
52 
53 #define __COUT_ERR__ __COUT_TYPE__(TLVL_ERROR) << __COUT_HDR__
54 #define __COUT_WARN__ __COUT_TYPE__(TLVL_WARNING) << __COUT_HDR__
55 #define __COUT_INFO__ __COUT_TYPE__(TLVL_INFO) << __COUT_HDR__
56 #define __COUT__ __COUT_TYPE__(TLVL_DEBUG) << __COUT_HDR__
57 #define __COUTS__(LVL) __COUT_TYPE__(TLVL_DEBUG + LVL) << __COUT_HDR__
58 #define __COUTT__ __COUT_TYPE__(TLVL_TRACE) << __COUT_HDR__
59 #define __COUTV__(X) __COUT__ << QUOTE(X) << " = " << (X) << __E__
60 #define __COUTTV__(X) __COUTT__ << QUOTE(X) << " = " << (X) << __E__
61 #define __COUTVS__(LVL,X) __COUT_TYPE__(TLVL_DEBUG + LVL) << __COUT_HDR__ << QUOTE(X) << " = " << (X) << __E__
62 
63 #define __COUT_MULTI__(LVL,X) if(TTEST(LVL)) { __COUTS__(LVL) << "Multi-line printout:" << __E__; StringMacros::coutSplit(X,LVL); }
64 
66 
67 #define __SS__ std::stringstream ss; ss << "|" << __MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
68 #define __SS_THROW__ { __COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str()); } //put in {}'s to prevent surprises, e.g. if ... else __SS_THROW__;
69 #define __SS_ONLY_THROW__ throw std::runtime_error(ss.str())
70 #define __SSV__(X) __SS__ << QUOTE(X) << " = " << X
71 
74 #define __CFG_MF_DECOR__ (theConfigurationRecordName_ + "\t<> ")
75 #define __CFG_MF_TYPE__(X) TLOG(X, __MF_SUBJECT__) << __CFG_MF_DECOR__
76 
77 #ifndef __COUT_TO_STD__
78 #define __CFG_COUT_TYPE__(X) __CFG_MF_TYPE__(X)
79 #else
80 #define __CFG_COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __CFG_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
81 #endif
82 
83 #define __CFG_COUT_ERR__ __CFG_COUT_TYPE__(TLVL_ERROR) << __COUT_HDR__
84 #define __CFG_COUT_WARN__ __CFG_COUT_TYPE__(TLVL_WARNING) << __COUT_HDR__
85 #define __CFG_COUT_INFO__ __CFG_COUT_TYPE__(TLVL_INFO) << __COUT_HDR__
86 #define __CFG_COUT__ __CFG_COUT_TYPE__(TLVL_DEBUG) << __COUT_HDR__
87 #define __CFG_COUTS__(LVL) __CFG_COUT_TYPE__(TLVL_DEBUG + LVL) << __COUT_HDR__
88 #define __CFG_COUTT__ __CFG_COUT_TYPE__(TLVL_TRACE) << __COUT_HDR__
89 #define __CFG_COUTV__(X) __CFG_COUT__ << QUOTE(X) << " = " << (X) << __E__
90 #define __CFG_COUTTV__(X) __CFG_COUTT__ << QUOTE(X) << " = " << (X) << __E__
91 
92 #define __CFG_SS__ std::stringstream ss; ss << "|" << __CFG_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
93 #define __CFG_SS_THROW__ { __CFG_COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str()); }
94 
96 
98 #define __FE_MF_DECOR__ ("FE:" + getInterfaceType() + std::string(":") + getInterfaceUID() + ":" + theConfigurationRecordName_ + "\t<> ")
99 #define __FE_MF_TYPE__(X) TLOG(X, __MF_SUBJECT__) << __FE_MF_DECOR__
100 
101 #ifndef __COUT_TO_STD__
102 #define __FE_COUT_TYPE__(X) __FE_MF_TYPE__(X)
103 #else
104 #define __FE_COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __FE_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
105 #endif
106 
107 #define __FE_COUT_ERR__ __FE_COUT_TYPE__(TLVL_ERROR) << __COUT_HDR__
108 #define __FE_COUT_WARN__ __FE_COUT_TYPE__(TLVL_WARNING) << __COUT_HDR__
109 #define __FE_COUT_INFO__ __FE_COUT_TYPE__(TLVL_INFO) << __COUT_HDR__
110 #define __FE_COUT__ __FE_COUT_TYPE__(TLVL_DEBUG) << __COUT_HDR__
111 #define __FE_COUTS__(LVL) __FE_COUT_TYPE__(TLVL_DEBUG + LVL) << __COUT_HDR__
112 #define __FE_COUTT__ __FE_COUT_TYPE__(TLVL_TRACE) << __COUT_HDR__
113 #define __FE_COUTV__(X) __FE_COUT__ << QUOTE(X) << " = " << (X) << __E__
114 #define __FE_COUTTV__(X) __FE_COUTT__ << QUOTE(X) << " = " << (X) << __E__
115 
116 #define __FE_SS__ std::stringstream ss; ss << "|" << __FE_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
117 #define __FE_SS_THROW__ { __FE_COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str()); }
118 
120 
122 #define __GEN_MF_DECOR__ (mfSubject_ + "\t<> ")
123 #define __GEN_MF_TYPE__(X) TLOG(X, __MF_SUBJECT__) << __GEN_MF_DECOR__
124 
125 #ifndef __COUT_TO_STD__
126 #define __GEN_COUT_TYPE__(X) __GEN_MF_TYPE__(X)
127 #else
128 #define __GEN_COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __GEN_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
129 #endif
130 
131 #define __GEN_COUT_ERR__ __GEN_COUT_TYPE__(TLVL_ERROR) << __COUT_HDR__
132 #define __GEN_COUT_WARN__ __GEN_COUT_TYPE__(TLVL_WARNING) << __COUT_HDR__
133 #define __GEN_COUT_INFO__ __GEN_COUT_TYPE__(TLVL_INFO) << __COUT_HDR__
134 #define __GEN_COUT__ __GEN_COUT_TYPE__(TLVL_DEBUG) << __COUT_HDR__
135 #define __GEN_COUTS__(LVL) __GEN_COUT_TYPE__(TLVL_DEBUG + LVL) << __COUT_HDR__
136 #define __GEN_COUTT__ __GEN_COUT_TYPE__(TLVL_TRACE) << __COUT_HDR__
137 #define __GEN_COUTV__(X) __GEN_COUT__ << QUOTE(X) << " = " << (X) << __E__
138 #define __GEN_COUTTV__(X) __GEN_COUTT__ << QUOTE(X) << " = " << (X) << __E__
139 
140 #define __GEN_SS__ std::stringstream ss; ss << "|" << __GEN_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
141 #define __GEN_SS_THROW__ { __GEN_COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str()); }
142 
144 
147 #define __SUP_MF_DECOR__ (supervisorClassNoNamespace_ + std::string(":") + CorePropertySupervisorBase::getSupervisorUID() + "\t<> ")
148 #define __SUP_MF_TYPE__(X) TLOG(X, __MF_SUBJECT__) << __SUP_MF_DECOR__ //mf::X(supervisorClassNoNamespace_ + "-" + CorePropertySupervisorBase::getSupervisorUID())
149 
150 #ifndef __COUT_TO_STD__
151 #define __SUP_COUT_TYPE__(X) __SUP_MF_TYPE__(X)
152 #else
153 #define __SUP_COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __SUP_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
154 #endif
155 
156 #define __SUP_COUT_ERR__ __SUP_COUT_TYPE__(TLVL_ERROR) << __COUT_HDR__
157 #define __SUP_COUT_WARN__ __SUP_COUT_TYPE__(TLVL_WARNING) << __COUT_HDR__
158 #define __SUP_COUT_INFO__ __SUP_COUT_TYPE__(TLVL_INFO) << __COUT_HDR__
159 #define __SUP_COUT__ __SUP_COUT_TYPE__(TLVL_DEBUG) << __COUT_HDR__
160 #define __SUP_COUTS__(LVL) __SUP_COUT_TYPE__(TLVL_DEBUG + LVL) << __COUT_HDR__
161 #define __SUP_COUTT__ __SUP_COUT_TYPE__(TLVL_TRACE) << __COUT_HDR__
162 #define __SUP_COUTV__(X) __SUP_COUT__ << QUOTE(X) << " = " << (X) << __E__
163 #define __SUP_COUTTV__(X) __SUP_COUTT__ << QUOTE(X) << " = " << (X) << __E__
164 #define __SUP_COUTVS__(LVL,X) __SUP_COUT_TYPE__(TLVL_DEBUG + LVL) << __SUP_MF_DECOR__ << __COUT_HDR__ << QUOTE(X) << " = " << (X) << __E__
165 
166 #define __SUP_SS__ std::stringstream ss; ss << "|" << __SUP_MF_DECOR__ << ": " << __COUT_HDR_FL__ << __COUT_HDR__
167 #define __SUP_SS_THROW__ { __SUP_COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str()); }
168 
170 #define __ENV__(X) StringMacros::otsGetEnvironmentVarable(X, std::string(__SHORTFILE__), __LINE__)
171 
172 //========================================================================================================================
176 #ifdef XDAQ_NOCONST
177 #define XDAQ_CONST_CALL
178 #else
179 #define XDAQ_CONST_CALL const
180 #endif
181 //========================================================================================================================
182 
183 //========================================================================================================================
187 namespace ots
188 {
189 struct __OTS_PAUSE_EXCEPTION__ : public std::exception
190 {
191  __OTS_PAUSE_EXCEPTION__(const std::string& what) : what_(what) {}
192  virtual char const* what() const throw() { return what_.c_str(); }
193  std::string what_;
194 };
195 } // end namespace ots
196 //========================================================================================================================
200 namespace ots
201 {
202 struct __OTS_STOP_EXCEPTION__ : public std::exception
203 {
204  __OTS_STOP_EXCEPTION__(const std::string& what) : what_(what) {}
205  virtual char const* what() const throw() { return what_.c_str(); }
206  std::string what_;
207 };
208 } // end namespace ots
209 
210 #endif
211 
212 // clang-format on