7 #ifndef PXR_BASE_TF_DIAGNOSTIC_H
8 #define PXR_BASE_TF_DIAGNOSTIC_H
26 #if defined(__cplusplus) || defined (doxygen)
68 #define TF_CODING_ERROR(fmt, args)
83 #define TF_RUNTIME_ERROR(fmt, args)
91 #define TF_FATAL_ERROR(fmt, args)
173 #define TF_STATUS(...)
193 #define TF_AXIOM(cond)
205 #define TF_DEV_AXIOM(cond)
266 #define TF_VERIFY(cond [, format, ...])
274 #if defined(__cplusplus) || defined(doxygen)
292 #define TF_FUNC_NAME() \
293 ArchGetPrettierFunctionName(__ARCH_FUNCTION__, __ARCH_PRETTY_FUNCTION__)
295 void Tf_TerminateHandler();
297 #if !defined(doxygen)
302 #ifdef TF_CODING_ERROR
303 #undef TF_CODING_ERROR
305 #define TF_CODING_ERROR(...) \
306 Tf_PostErrorHelper(TF_CALL_CONTEXT, \
307 TF_DIAGNOSTIC_CODING_ERROR_TYPE, __VA_ARGS__)
309 #ifdef TF_FATAL_CODING_ERROR
310 #undef TF_FATAL_CODING_ERROR
312 #define TF_FATAL_CODING_ERROR \
313 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
314 TF_DIAGNOSTIC_CODING_ERROR_TYPE).IssueFatalError
317 #ifdef TF_CODING_WARNING
318 #undef TF_CODING_WARNING
320 #define TF_CODING_WARNING(...) \
321 Tf_PostWarningHelper(TF_CALL_CONTEXT, \
322 TF_DIAGNOSTIC_CODING_ERROR_TYPE, __VA_ARGS__)
324 #ifdef TF_DIAGNOSTIC_WARNING
325 #undef TF_DIAGNOSTIC_WARNING
327 #define TF_DIAGNOSTIC_WARNING \
328 Tf_DiagnosticHelper(TF_CALL_CONTEXT.Hide(), \
329 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning
331 #ifdef TF_RUNTIME_ERROR
332 #undef TF_RUNTIME_ERROR
333 #endif // TF_RUNTIME_ERROR
334 #define TF_RUNTIME_ERROR(...) \
335 Tf_PostErrorHelper(TF_CALL_CONTEXT, \
336 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE, __VA_ARGS__)
338 #ifdef TF_FATAL_ERROR
339 #undef TF_FATAL_ERROR
340 #endif // TF_FATAL_ERROR
341 #define TF_FATAL_ERROR \
342 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
343 TF_DIAGNOSTIC_FATAL_ERROR_TYPE).IssueFatalError
345 #ifdef TF_DIAGNOSTIC_FATAL_ERROR
346 #undef TF_DIAGNOSTIC_FATAL_ERROR
347 #endif // TF_DIAGNOSTIC_FATAL_ERROR
348 #define TF_DIAGNOSTIC_FATAL_ERROR \
349 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
350 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE).IssueFatalError
352 #ifdef TF_DIAGNOSTIC_NONFATAL_ERROR
353 #undef TF_DIAGNOSTIC_NONFATAL_ERROR
354 #endif // TF_DIAGNOSTIC_NONFATAL_ERROR
355 #define TF_DIAGNOSTIC_NONFATAL_ERROR \
356 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
357 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning
371 #define TF_WARN(...) \
372 Tf_PostWarningHelper(TF_CALL_CONTEXT, __VA_ARGS__)
377 #define TF_STATUS(...) \
378 Tf_PostStatusHelper(TF_CALL_CONTEXT, __VA_ARGS__)
383 #define TF_ERROR(...) \
384 Tf_PostErrorHelper(TF_CALL_CONTEXT, __VA_ARGS__)
386 #ifdef TF_QUIET_ERROR
387 #undef TF_QUIET_ERROR
389 #define TF_QUIET_ERROR(...) \
390 Tf_PostQuietlyErrorHelper(TF_CALL_CONTEXT, __VA_ARGS__)
393 #define TF_VERIFY(cond, ...) \
394 (ARCH_LIKELY(cond) ? true : \
395 Tf_FailedVerifyHelper(TF_CALL_CONTEXT, # cond, \
396 Tf_VerifyStringFormat(__VA_ARGS__)))
401 char const *condition,
char const *msg);
405 Tf_VerifyStringFormat() {
return nullptr; }
407 Tf_VerifyStringFormat(
const char *
format, ...) ARCH_PRINTF_FUNCTION(1, 2);
411 #endif // __cplusplus || doxygen
416 void TfSetProgramNameForErrors(std::string
const& programName);
421 std::string TfGetProgramNameForErrors();
424 struct Tf_DiagnosticHelper {
435 TF_API void IssueError(std::string
const &msg)
const;
436 TF_API void IssueError(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
437 TF_API void IssueFatalError(std::
string const &msg) const;
438 TF_API void IssueFatalError(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
439 TF_API void IssueWarning(std::
string const &msg) const;
440 TF_API void IssueWarning(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
441 TF_API void IssueStatus(std::
string const &msg) const;
442 TF_API void IssueStatus(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
466 #endif // PXR_BASE_TF_DIAGNOSTIC_H
GLint GLint GLsizei GLint GLenum GLenum type
GLint GLint GLsizei GLint GLenum format
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
TF_API void TfInstallTerminateAndCrashHandlers()