otsdaq  v2_01_00
CoutMacros.h
1 #ifndef _ots_Cout_Macros_h_
2 #define _ots_Cout_Macros_h_
3 
4 
5 #include <string.h> //for strstr (not the same as <string>)
6 #include <iostream> //for cout
7 #include <sstream> //for stringstream, std::stringbuf
8 
9 //take filename only after srcs/ (this gives by repo name)
10 #define __SHORTFILE__ (strstr(&__FILE__[0], "/srcs/") ? strstr(&__FILE__[0], "/srcs/") + 6 : __FILE__)
11 
12 //take only file name
13 #define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
14 
15 #define __E__ std::endl
16 
17 //#define __COUT_HDR__ __FILE__ << " : " << __PRETTY_FUNCTION__ << " [" << __LINE__ << "]\t"
18 #define __COUT_HDR_FL__ __SHORTFILE__ << " [" << std::dec << __LINE__ << "]\t"
19 #define __COUT_HDR_FP__ __SHORTFILE__ << " : " << __PRETTY_FUNCTION__ << "\t"
20 #define __COUT_HDR_PL__ __PRETTY_FUNCTION__ << " [" << std::dec << __LINE__ << "]\t"
21 #define __COUT_HDR_F__ __SHORTFILE__ << "\t"
22 #define __COUT_HDR_L__ std::dec << __LINE__ << "\t"
23 #define __COUT_HDR_P__ __PRETTY_FUNCTION__ << "\t"
24 #define __COUT_HDR__ __COUT_HDR_FL__
25 
26 
27 #define __COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __MF_SUBJECT__ << ":"
28 
29 #define __COUT_ERR__ __COUT_TYPE__(LogError) << __COUT_HDR__
30 #define __COUT_WARN__ __COUT_TYPE__(LogWarning) << __COUT_HDR__
31 #define __COUT_INFO__ __COUT_TYPE__(LogInfo) << __COUT_HDR__
32 #define __COUT__ __COUT_TYPE__(LogDebug) << __COUT_HDR__
33 #define __COUTV__(X) __COUT__ << QUOTE(X) << " = " << X << __E__
34 
35 
39 
40 #define __MF_SUBJECT__ "ots" //default subject.. others can #undef and re-#define
41 //Note: to turn off MF everywhere, just replace with std::cout here at __MF_TYPE__(X)!
42 
43 #define Q(X) #X
44 #define QUOTE(X) Q(X)
45 //#define __MF_TYPE__(X) FIXME ?? how to do this ...(getenv("OTSDAQ_USING_MF")=="1"? mf::X (__MF_SUBJECT__) : std::cout << QUOTE(X) << ":" << __MF_SUBJECT__ << ":")
46 #define __MF_TYPE__(X) mf::X (__MF_SUBJECT__)
47 
48 
49 
50 #define __MF_HDR__ __COUT_HDR_FL__
51 #define __MOUT_ERR__ __MF_TYPE__(LogError) << __MF_HDR__
52 #define __MOUT_WARN__ __MF_TYPE__(LogWarning) << __MF_HDR__
53 #define __MOUT_INFO__ __MF_TYPE__(LogInfo) << __MF_HDR__
54 #define __MOUT__ __MF_TYPE__(LogDebug) << __MF_HDR__
55 #define __MOUTV__(X) __MOUT__ << QUOTE(X) << " = " << X << _E__
56 
57 
61 #define __MCOUT_ERR__(X) {__MOUT_ERR__ << X; __COUT_ERR__ << X;}
62 #define __MCOUT_WARN__(X) {__MOUT_WARN__ << X; __COUT_WARN__ << X;}
63 #define __MCOUT_INFO__(X) {__MOUT_INFO__ << X; __COUT_INFO__ << X;}
64 #define __MCOUT__(X) {__MOUT__ << X; __COUT__ << X;}
65 #define __MCOUTV__(X) {__MOUTV__(X); __COUTV__(X);}
66 
67 
69 
70 #define __SS__ std::stringstream ss; ss << ":" << __MF_SUBJECT__ << ":" << __COUT_HDR__
71 #define __SS_THROW__ __COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str())
72 
74 
75 //for configurable objects, add name to subject
76 #define __CFG_COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __MF_SUBJECT__ << "-" << theConfigurationRecordName_ << ":"
77 #define __CFG_MF_TYPE__(X) mf::X (std::string(__MF_SUBJECT__) + theConfigurationRecordName_)
78 
79 #define __CFG_MOUT_ERR__ __CFG_MF_TYPE__(LogError) << __MF_HDR__
80 #define __CFG_MOUT_WARN__ __CFG_MF_TYPE__(LogWarning) << __MF_HDR__
81 #define __CFG_MOUT_INFO__ __CFG_MF_TYPE__(LogInfo) << __MF_HDR__
82 #define __CFG_MOUT__ __CFG_MF_TYPE__(LogDebug) << __MF_HDR__
83 #define __CFG_MOUTV__(X) __CFG_MOUT__ << QUOTE(X) << " = " << X
84 #define __CFG_COUT_ERR__ __CFG_COUT_TYPE__(LogError) << __COUT_HDR__
85 #define __CFG_COUT_WARN__ __CFG_COUT_TYPE__(LogWarning) << __COUT_HDR__
86 #define __CFG_COUT_INFO__ __CFG_COUT_TYPE__(LogInfo) << __COUT_HDR__
87 #define __CFG_COUT__ __CFG_COUT_TYPE__(LogDebug) << __COUT_HDR__
88 #define __CFG_COUTV__(X) __CFG_COUT__ << QUOTE(X) << " = " << X << __E__
89 
90 #define __CFG_MCOUT_ERR__(X) {__CFG_MOUT_ERR__ << X; __CFG_COUT_ERR__ << X;}
91 #define __CFG_MCOUT_WARN__(X) {__CFG_MOUT_WARN__ << X; __CFG_COUT_WARN__ << X;}
92 #define __CFG_MCOUT_INFO__(X) {__CFG_MOUT_INFO__ << X; __CFG_COUT_INFO__ << X;}
93 #define __CFG_MCOUT__(X) {__CFG_MOUT__ << X; __CFG_COUT__ << X;}
94 #define __CFG_MCOUTV__(X) {__CFG_MOUTV__(X); __CFG_COUTV__(X);}
95 
96 #define __CFG_SS__ std::stringstream ss; ss << ":" << __MF_SUBJECT__ << "-" << theConfigurationRecordName_ << ":" << __COUT_HDR__
97 #define __CFG_SS_THROW__ __CFG_COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str())
98 
99 
101 
102 //for core supervisor objects (with supervisorClassNoNamespace_ defined), add class to subject
103 #define __SUP_COUT_TYPE__(X) std::cout << QUOTE(X) << ":" << __MF_SUBJECT__ << "-" << supervisorClassNoNamespace_ << ":"
104 #define __SUP_MF_TYPE__(X) mf::X (std::string(__MF_SUBJECT__) + supervisorClassNoNamespace_)
105 
106 #define __SUP_MOUT_ERR__ __SUP_MF_TYPE__(LogError) << __MF_HDR__
107 #define __SUP_MOUT_WARN__ __SUP_MF_TYPE__(LogWarning) << __MF_HDR__
108 #define __SUP_MOUT_INFO__ __SUP_MF_TYPE__(LogInfo) << __MF_HDR__
109 #define __SUP_MOUT__ __SUP_MF_TYPE__(LogDebug) << __MF_HDR__
110 #define __SUP_MOUTV__(X) __SUP_MOUT__ << QUOTE(X) << " = " << X
111 #define __SUP_COUT_ERR__ __SUP_COUT_TYPE__(LogError) << __COUT_HDR__
112 #define __SUP_COUT_WARN__ __SUP_COUT_TYPE__(LogWarning) << __COUT_HDR__
113 #define __SUP_COUT_INFO__ __SUP_COUT_TYPE__(LogInfo) << __COUT_HDR__
114 #define __SUP_COUT__ __SUP_COUT_TYPE__(LogDebug) << __COUT_HDR__
115 #define __SUP_COUTV__(X) __SUP_COUT__ << QUOTE(X) << " = " << X << __E__
116 
117 #define __SUP_MCOUT_ERR__(X) {__SUP_MOUT_ERR__ << X; __SUP_COUT_ERR__ << X;}
118 #define __SUP_MCOUT_WARN__(X) {__SUP_MOUT_WARN__ << X; __SUP_COUT_WARN__ << X;}
119 #define __SUP_MCOUT_INFO__(X) {__SUP_MOUT_INFO__ << X; __SUP_COUT_INFO__ << X;}
120 #define __SUP_MCOUT__(X) {__SUP_MOUT__ << X; __SUP_COUT__ << X;}
121 #define __SUP_MCOUTV__(X) {__SUP_MOUTV__(X); __SUP_COUTV__(X);}
122 
123 #define __SUP_SS__ std::stringstream ss; ss << ":" << __MF_SUBJECT__ << "-" << supervisorClassNoNamespace_ << ":" << __COUT_HDR__
124 #define __SUP_SS_THROW__ __SUP_COUT_ERR__ << "\n" << ss.str(); throw std::runtime_error(ss.str())
125 
126 
127 
128 //========================================================================================================================
129 //const_cast away the const
130 // so that otsdaq is compatible with slf6 and slf7 versions of xdaq
131 // where they changed to const xdaq::ApplicationDescriptor* in slf7
132 #ifdef XDAQ_NOCONST
133 #define XDAQ_CONST_CALL
134 #else
135 #define XDAQ_CONST_CALL const
136 #endif
137 //========================================================================================================================
138 
139 
140 
141 
142 #endif