otsdaq  v2_01_00
MessageTools.h
1 /****************************************************************************
2 ** Authors: Dario Menasce, Stefano Terzo
3 **
4 ** I.N.F.N. Milan-Bicocca
5 ** Piazza della Scienza 3, Edificio U2
6 ** Milano, 20126
7 **
8 ****************************************************************************/
9 
10 #ifndef MESSAGETOOLS_H
11 #define MESSAGETOOLS_H
12 
13 #include <iostream>
14 #include <sstream>
15 #include <algorithm>
16 #ifndef __CINT__
17 #include "otsdaq-core/MessageFacility/MessageFacility.h"
18 #endif
19 #include "otsdaq-core/Macros/CoutMacros.h"
20 
21 #include "ANSIColors.h"
22 
23 #define FATAL(MSG,COLOR) \
24  { \
25  std::stringstream msg_ ; \
26  std::stringstream PFs_ ; \
27  std::string PF_ = __PRETTY_FUNCTION__ ; \
28  int PFSize = PF_.size() ; \
29  int maxL = 90 ; \
30  if(PFSize > 30) {PFSize = 30 ;} \
31  for(int i=0; i<PFSize; ++i) {PFs_<<PF_[i];} \
32  if(PFSize<(int)PF_.size()) \
33  {maxL -= 3; PFs_<<ACRed<<"...";} \
34  msg_ << ACCyan << ACBold \
35  << __LINE__ \
36  << ACPlain << ACYellow \
37  << "\t] [" \
38  << ACRed << ACBold << ACReverse \
39  << "FATAL:" \
40  << ACPlain \
41  << ACWhite << ACBold \
42  << " " \
43  << PFs_.str() \
44  << ACPlain << ACYellow \
45  << "]" ; \
46  int blankSize = maxL - msg_.str().size() + 1 ; \
47  if( blankSize < 0 ) blankSize = 2 ; \
48  std::string blanks = "" ; \
49  for(int i=0; i<blankSize; ++i) \
50  { \
51  blanks += " " ; \
52  } \
53  std::cout << __COUT_HDR_FL__ << msg_.str() \
54  << blanks \
55  << COLOR << ACBold \
56  << MSG \
57  << ACPlain \
58  << std::endl ; \
59  }
60 
61 #define STDLINE(MSG,COLOR) \
62  { \
63  std::stringstream msg_ ; \
64  std::stringstream PFs_ ; \
65  std::string PF_ = __PRETTY_FUNCTION__ ; \
66  int PFSize = PF_.size() ; \
67  int maxL = 90 ; \
68  if(PFSize > 30) {PFSize = 30 ;} \
69  for(int i=0; i<PFSize; ++i) {PFs_<<PF_[i];} \
70  if(PFSize<(int)PF_.size()) \
71  {maxL -= 4; PFs_<<ACRed<<"...";} \
72  else \
73  {PFs_<<ACPlain<<ACPlain<<ACPlain<<ACPlain;} \
74  msg_ << ACCyan << ACBold \
75  << __LINE__ \
76  << ACPlain << ACYellow \
77  << "\t] [" \
78  << ACPlain \
79  << ACWhite << ACBold \
80  << PFs_.str() \
81  << ACPlain << ACYellow \
82  << "]" ; \
83  int blankSize = maxL - msg_.str().size() + 1 ; \
84  if( blankSize < 0 ) blankSize = 3 ; \
85  std::string blanks = "" ; \
86  for(int i=0; i<blankSize; ++i) \
87  { \
88  blanks += " " ; \
89  } \
90  std::cout << __COUT_HDR_FL__ << msg_.str() \
91  << blanks \
92  << COLOR << ACBold \
93  << MSG \
94  << ACPlain \
95  << std::endl ; \
96  }
97 
98 #define STDSNAP(MSG,COLOR) \
99  { \
100  std::stringstream msg_ ; \
101  std::stringstream PFs_ ; \
102  std::string PF_ = __PRETTY_FUNCTION__ ; \
103  int PFSize = PF_.size() ; \
104  int maxL = 90 ; \
105  if(PFSize > 30) {PFSize = 30 ;} \
106  for(int i=0; i<PFSize; ++i) {PFs_<<PF_[i];} \
107  if(PFSize<(int)PF_.size()) \
108  {maxL -= 4; PFs_<<ACRed<<"...";} \
109  msg_ << ACCR \
110  << ACCyan << ACBold \
111  << __LINE__ \
112  << ACPlain << ACYellow \
113  << "\t] [" \
114  << ACPlain \
115  << ACWhite << ACBold \
116  << PFs_.str() \
117  << ACPlain << ACYellow \
118  << "]" ; \
119  int blankSize = maxL - msg_.str().size() + 1 ; \
120  if( blankSize < 0 ) blankSize = 3 ; \
121  std::string blanks = "" ; \
122  for(int i=0; i<blankSize; ++i) \
123  { \
124  blanks += " " ; \
125  } \
126  std::cout << __COUT_HDR_FL__ << msg_.str() \
127  << blanks \
128  << COLOR << ACBold \
129  << MSG \
130  << ACPlain \
131  << std::flush ; \
132  }
133 namespace monicelli
134 {
135 
136 class Utils
137 {
138  public:
139  Utils() {;}
140 
141  inline static int toInt(std::string inputString)
142  {
143  std::istringstream iss_ ;
144  iss_.str(inputString) ;
145  int n ;
146  iss_ >> n ;
147 
148  return n ;
149  }
150  //=============================================================================
151  inline static double toDouble(std::string inputString)
152  {
153  std::istringstream iss_ ;
154  iss_.str(inputString) ;
155  double n ;
156  iss_ >> n ;
157 
158  return n ;
159  }
160  //=============================================================================
161  inline static int toDec(unsigned long long inputBinary)
162  {
163  std::stringstream ss ;
164  ss.str("") ;
165  int n = inputBinary ;
166  ss << std::dec << n ;
167  n = Utils::toInt(ss.str()) ;
168 
169  return n ;
170  }
171 
172 } ;
173 }
174 #endif // MESSAGETOOLS_H