1 // Copyright Contributors to the OpenVDB Project 2 // SPDX-License-Identifier: MPL-2.0 3 4 /// @file openvdb_ax/Exceptions.h 5 /// 6 /// @authors Nick Avramoussis, Richard Jones 7 /// 8 /// @brief OpenVDB AX Exceptions 9 /// 10 11 #ifndef OPENVDB_AX_EXCEPTIONS_HAS_BEEN_INCLUDED 12 #define OPENVDB_AX_EXCEPTIONS_HAS_BEEN_INCLUDED 13 14 #include <openvdb/version.h> 15 #include <openvdb/Exceptions.h> 16 17 #include <sstream> 18 #include <string> 19 20 namespace openvdb { 21 OPENVDB_USE_VERSION_NAMESPACE 22 namespace OPENVDB_VERSION_NAME { 23 24 #define OPENVDB_AX_EXCEPTION(_classname) \ 25 class OPENVDB_API _classname: public Exception \ 26 { \ 27 public: \ 28 _classname() noexcept: Exception( #_classname ) {} \ 29 explicit _classname(const std::string& msg) noexcept: Exception( #_classname , &msg) {} \ 30 } 31 32 // @note: Compilation errors due to invalid AX code should be collected using a separate logging system. 33 // These errors are only thrown upon encountering fatal errors within the compiler/executables themselves 34 OPENVDB_AX_EXCEPTION(AXTokenError); 35 OPENVDB_AX_EXCEPTION(AXSyntaxError); 36 OPENVDB_AX_EXCEPTION(AXCodeGenError); 37 OPENVDB_AX_EXCEPTION(AXCompilerError); 38 OPENVDB_AX_EXCEPTION(AXExecutionError); 39 40 #undef OPENVDB_AX_EXCEPTION 41 42 } // namespace OPENVDB_VERSION_NAME 43 } // namespace openvdb 44 45 #endif // OPENVDB_AX_EXCEPTIONS_HAS_BEEN_INCLUDED 46 47