#ifndef XGBOOST_C_API_C_API_ERROR_H_
#define XGBOOST_C_API_C_API_ERROR_H_
#include <dmlc/base.h>
#include "c_api_utils.h"
#include "xgboost/logging.h"
#ifdef LOG_CAPI_INVOCATION
#define API_BEGIN() \
LOG(CONSOLE) << "[XGBoost C API invocation] " << __PRETTY_FUNCTION__; \
try { \
auto __guard = ::xgboost::XGBoostAPIGuard();
#define API_BEGIN_UNGUARD() \
LOG(CONSOLE) << "[XGBoost C API invocation] " << __PRETTY_FUNCTION__; \
try {
#else
#define API_BEGIN() \
try { \
auto __guard = ::xgboost::XGBoostAPIGuard();
#define API_BEGIN_UNGUARD() try {
#endif
#define API_END() \
} catch (dmlc::Error & _except_) { \
return XGBAPIHandleException(_except_); \
} catch (std::exception const& _except_) { \
return XGBAPIHandleException(dmlc::Error(_except_.what())); \
} \
return 0;
#define CHECK_HANDLE() \
if (handle == nullptr) ::xgboost::detail::EmptyHandle();
void XGBAPISetLastError(const char* msg);
inline int XGBAPIHandleException(const dmlc::Error& e) {
XGBAPISetLastError(e.what());
return -1;
}
#define xgboost_CHECK_C_ARG_PTR(out_ptr) \
do { \
if (XGBOOST_EXPECT(!(out_ptr), false)) { \
LOG(FATAL) << "Invalid pointer argument: " << #out_ptr; \
} \
} while (0)
#endif