24 #ifndef PXR_BASE_TF_DIAGNOSTIC_H
25 #define PXR_BASE_TF_DIAGNOSTIC_H
43 #if defined(__cplusplus) || defined (doxygen)
85 #define TF_CODING_ERROR(fmt, args)
100 #define TF_RUNTIME_ERROR(fmt, args)
108 #define TF_FATAL_ERROR(fmt, args)
190 #define TF_STATUS(...)
210 #define TF_AXIOM(cond)
222 #define TF_DEV_AXIOM(cond)
283 #define TF_VERIFY(cond [, format, ...])
291 #if defined(__cplusplus) || defined(doxygen)
309 #define TF_FUNC_NAME() \
310 ArchGetPrettierFunctionName(__ARCH_FUNCTION__, __ARCH_PRETTY_FUNCTION__)
312 void Tf_TerminateHandler();
314 #if !defined(doxygen)
319 #ifdef TF_CODING_ERROR
320 #undef TF_CODING_ERROR
322 #define TF_CODING_ERROR(...) \
323 Tf_PostErrorHelper(TF_CALL_CONTEXT, \
324 TF_DIAGNOSTIC_CODING_ERROR_TYPE, __VA_ARGS__)
326 #ifdef TF_FATAL_CODING_ERROR
327 #undef TF_FATAL_CODING_ERROR
329 #define TF_FATAL_CODING_ERROR \
330 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
331 TF_DIAGNOSTIC_CODING_ERROR_TYPE).IssueFatalError
334 #ifdef TF_CODING_WARNING
335 #undef TF_CODING_WARNING
337 #define TF_CODING_WARNING(...) \
338 Tf_PostWarningHelper(TF_CALL_CONTEXT, \
339 TF_DIAGNOSTIC_CODING_ERROR_TYPE, __VA_ARGS__)
341 #ifdef TF_DIAGNOSTIC_WARNING
342 #undef TF_DIAGNOSTIC_WARNING
344 #define TF_DIAGNOSTIC_WARNING \
345 Tf_DiagnosticHelper(TF_CALL_CONTEXT.Hide(), \
346 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning
348 #ifdef TF_RUNTIME_ERROR
349 #undef TF_RUNTIME_ERROR
350 #endif // TF_RUNTIME_ERROR
351 #define TF_RUNTIME_ERROR(...) \
352 Tf_PostErrorHelper(TF_CALL_CONTEXT, \
353 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE, __VA_ARGS__)
355 #ifdef TF_FATAL_ERROR
356 #undef TF_FATAL_ERROR
357 #endif // TF_FATAL_ERROR
358 #define TF_FATAL_ERROR \
359 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
360 TF_DIAGNOSTIC_FATAL_ERROR_TYPE).IssueFatalError
362 #ifdef TF_DIAGNOSTIC_FATAL_ERROR
363 #undef TF_DIAGNOSTIC_FATAL_ERROR
364 #endif // TF_DIAGNOSTIC_FATAL_ERROR
365 #define TF_DIAGNOSTIC_FATAL_ERROR \
366 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
367 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE).IssueFatalError
369 #ifdef TF_DIAGNOSTIC_NONFATAL_ERROR
370 #undef TF_DIAGNOSTIC_NONFATAL_ERROR
371 #endif // TF_DIAGNOSTIC_NONFATAL_ERROR
372 #define TF_DIAGNOSTIC_NONFATAL_ERROR \
373 Tf_DiagnosticHelper(TF_CALL_CONTEXT, \
374 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning
388 #define TF_WARN(...) \
389 Tf_PostWarningHelper(TF_CALL_CONTEXT, __VA_ARGS__)
394 #define TF_STATUS(...) \
395 Tf_PostStatusHelper(TF_CALL_CONTEXT, __VA_ARGS__)
400 #define TF_ERROR(...) \
401 Tf_PostErrorHelper(TF_CALL_CONTEXT, __VA_ARGS__)
403 #ifdef TF_QUIET_ERROR
404 #undef TF_QUIET_ERROR
406 #define TF_QUIET_ERROR(...) \
407 Tf_PostQuietlyErrorHelper(TF_CALL_CONTEXT, __VA_ARGS__)
410 #define TF_VERIFY(cond, ...) \
411 (ARCH_LIKELY(cond) ? true : \
412 Tf_FailedVerifyHelper(TF_CALL_CONTEXT, # cond, \
413 Tf_VerifyStringFormat(__VA_ARGS__)))
418 char const *condition,
char const *msg);
422 Tf_VerifyStringFormat() {
return nullptr; }
424 Tf_VerifyStringFormat(
const char *
format, ...) ARCH_PRINTF_FUNCTION(1, 2);
428 #endif // __cplusplus || doxygen
433 void TfSetProgramNameForErrors(
std::string const& programName);
441 struct Tf_DiagnosticHelper {
453 TF_API void IssueError(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
454 TF_API void IssueFatalError(std::
string const &msg) const;
455 TF_API void IssueFatalError(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
456 TF_API void IssueWarning(std::
string const &msg) const;
457 TF_API void IssueWarning(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
458 TF_API void IssueStatus(std::
string const &msg) const;
459 TF_API void IssueStatus(
char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
483 #endif // PXR_BASE_TF_DIAGNOSTIC_H
GLsizei const GLchar *const * string
GLint GLint GLsizei GLint GLenum format
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
#define PXR_NAMESPACE_CLOSE_SCOPE
TF_API void TfInstallTerminateAndCrashHandlers()