Hermes
debug.h
Go to the documentation of this file.
1 
32 #ifndef HERMES_LOG_DEBUG_H
33 #define HERMES_LOG_DEBUG_H
34 
35 #include <hermes/common/defs.h>
36 #include <hermes/logging/logging.h>
37 #include <cmath>
38 #include <iostream>
39 #include <sstream>
40 
41 #ifndef HERMES_DEBUG
42 #define HERMES_DEBUG
43 #endif
44 
45 #ifndef CHECKS_ENABLED
46 #define CHECKS_ENABLED
47 #endif
48 
49 #ifndef ASSERTIONS_ENABLED
50 #define ASSERTIONS_ENABLED
51 #endif
52 
53 // *********************************************************************************************************************
54 // UTILS
55 // *********************************************************************************************************************
56 // *********************************************************************************************************************
57 // COMPILATION WARNINGS
58 // *********************************************************************************************************************
59 #ifndef HERMES_UNUSED_VARIABLE
62 #define HERMES_UNUSED_VARIABLE(x) ((void)x);
63 #endif
64 
65 #ifndef HERMES_NOT_IMPLEMENTED
67 #define HERMES_NOT_IMPLEMENTED \
68  printf("[%s][%d][%s] calling not implemented function.", __FILE__, __LINE__, __FUNCTION__);
69 #endif
70 // *********************************************************************************************************************
71 // DEBUG MODE
72 // *********************************************************************************************************************
73 #ifdef HERMES_DEBUG
74 #define HERMES_DEBUG_CODE(CODE_CONTENT) {CODE_CONTENT}
75 #else
76 #define HERMES_DEBUG_CODE(CODE_CONTENT)
77 #endif
78 
79 // *********************************************************************************************************************
80 // CHECKS
81 // *********************************************************************************************************************
82 #ifdef CHECKS_ENABLED
83 
87 #define HERMES_CHECK_EQUAL(A, B) \
88  if(A == B) {} \
89  else { \
90  hermes::Log::warn("[{}][{}][CHECK_EQUAL FAIL {} == {}] {} != {}", __FILE__, __LINE__, (#A), (#B), A, B); \
91  }
92 
95 #define HERMES_CHECK_EXP(expr) \
96  if(expr) {} \
97  else { \
98  hermes::Log::warn("[{}][{}][CHECK_EXP FAIL {}]", __FILE__, __LINE__, (#expr)); \
99  }
100 
104 #define HERMES_CHECK_EXP_WITH_LOG(expr, M) \
105  if(expr) {} \
106  else { \
107  hermes::Log::warn("[{}][{}][CHECK_EXP FAIL {}]: {}", __FILE__, __LINE__, (#expr), M); \
108  }
109 #else
110 
111 #define HERMES_CHECK_EXP(expr)
112 #define HERMES_CHECK_EXP_WITH_LOG(expr, M)
113 
114 #endif // CHECKS_ENABLED
115 // *********************************************************************************************************************
116 // ASSERTION
117 // *********************************************************************************************************************
118 #ifdef ASSERTIONS_ENABLED
119 
120 //#define debugBreak() asm ("int 3")
121 #define debugBreak() exit(-1)
122 
125 #define HERMES_ASSERT(expr) \
126  if(expr) {} \
127  else { \
128  hermes::Log::error("[{}][{}][ASSERT FAIL {}]", __FILE__, __LINE__, #expr); \
129  debugBreak(); \
130  }
134 #define HERMES_ASSERT_WITH_LOG(expr, M) \
135  if(expr) {} \
136  else { \
137  hermes::Log::error("[{}][{}][ASSERT FAIL {}]: {}", __FILE__, __LINE__, #expr, M); \
138  debugBreak(); \
139  }
140 #else
141 
142 #define HERMES_ASSERT(expr)
143 #define HERMES_ASSERT_WITH_LOG(expr, M)
144 
145 #endif // ASSERTIONS_ENABLED
146 // *********************************************************************************************************************
147 // CODE FLOW
148 // *********************************************************************************************************************
151 #define HERMES_RETURN_IF(A) \
152  if (A) { \
153  return; \
154  }
157 #define HERMES_RETURN_IF_NOT(A) \
158  if (!(A)) { \
159  return; \
160  }
164 #define HERMES_RETURN_VALUE_IF(A, R) \
165  if (A) { \
166  return R; \
167  }
171 #define HERMES_RETURN_VALUE_IF_NOT(A, R) \
172  if (!(A)) { \
173  return R; \
174  }
179 #define HERMES_LOG_AND_RETURN_VALUE_IF_NOT(A, R, M) \
180  if (!(A)) { \
181  HERMES_LOG(M); \
182  return R; \
183  }
187 #define HERMES_LOG_AND_RETURN_IF_NOT(A, M) \
188  if (!(A)) { \
189  HERMES_LOG(M); \
190  return; \
191  }
192 
193 #endif
194 
Data type definitions.
Logging functions.