24 #ifndef PXR_BASE_TF_DIAGNOSTIC_LITE_H
25 #define PXR_BASE_TF_DIAGNOSTIC_LITE_H
44 #include "pxr/base/tf/api.h"
45 #include "pxr/base/arch/buildMode.h"
51 PXR_NAMESPACE_OPEN_SCOPE
56 TF_DIAGNOSTIC_INVALID_TYPE = 0,
57 TF_DIAGNOSTIC_CODING_ERROR_TYPE,
58 TF_DIAGNOSTIC_FATAL_CODING_ERROR_TYPE,
59 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE,
60 TF_DIAGNOSTIC_FATAL_ERROR_TYPE,
61 TF_DIAGNOSTIC_NONFATAL_ERROR_TYPE,
62 TF_DIAGNOSTIC_WARNING_TYPE,
63 TF_DIAGNOSTIC_STATUS_TYPE,
64 TF_APPLICATION_EXIT_TYPE,
70 struct Tf_DiagnosticLiteHelper {
71 constexpr Tf_DiagnosticLiteHelper(TfCallContext
const &context,
78 TF_API
void IssueError(
80 TF_API
void IssueFatalError(
82 TF_API
void IssueWarning(
83 char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
84 TF_API
void IssueStatus(
85 char const *fmt, ...) const ARCH_PRINTF_FUNCTION(2,3);
88 TfCallContext _context;
92 #define TF_CODING_ERROR \
93 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
94 TF_DIAGNOSTIC_CODING_ERROR_TYPE).IssueError
96 #define TF_CODING_WARNING \
97 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
98 TF_DIAGNOSTIC_CODING_ERROR_TYPE).IssueWarning \
100 #define TF_FATAL_CODING_ERROR \
101 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
102 TF_DIAGNOSTIC_CODING_ERROR_TYPE).IssueFatalError
104 #define TF_RUNTIME_ERROR \
105 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
106 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE).IssueError
108 #define TF_FATAL_ERROR \
109 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
110 TF_DIAGNOSTIC_FATAL_ERROR_TYPE).IssueFatalError
112 #define TF_DIAGNOSTIC_FATAL_ERROR \
113 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
114 TF_DIAGNOSTIC_RUNTIME_ERROR_TYPE).IssueFatalError
116 #define TF_DIAGNOSTIC_NONFATAL_ERROR \
117 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
118 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning
120 #define TF_DIAGNOSTIC_WARNING \
121 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT.Hide(), \
122 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning
125 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
126 TF_DIAGNOSTIC_WARNING_TYPE).IssueWarning
129 Tf_DiagnosticLiteHelper(TF_CALL_CONTEXT, \
130 TF_DIAGNOSTIC_STATUS_TYPE).IssueStatus
133 Tf_AxiomHelper(
bool val, TfCallContext
const &ctx,
char const *txt) {
134 return (ARCH_LIKELY(val)) ?
true :
135 (Tf_DiagnosticLiteHelper(ctx, TF_DIAGNOSTIC_FATAL_ERROR_TYPE).
136 IssueFatalError(
"Failed axiom: ' %s '", txt),
false);
139 #define TF_AXIOM(cond) \
140 Tf_AxiomHelper(static_cast<bool>((cond)), TF_CALL_CONTEXT, #cond)
142 #define TF_DEV_AXIOM(cond) \
143 Tf_AxiomHelper(!ARCH_DEV_BUILD || \
144 static_cast<bool>((cond)), TF_CALL_CONTEXT, #cond)
146 #endif // !defined(doxygen)
148 PXR_NAMESPACE_CLOSE_SCOPE
150 #endif // PXR_BASE_TF_DIAGNOSTIC_LITE_H
Functions for recording call locations.
Define function attributes.
#define ARCH_PRINTF_FUNCTION(_fmt, _firstArg)
Macro used to indicate a function takes a printf-like specification.
TfDiagnosticType
Enum describing various diagnostic conditions.