Don't use memset to set struct when compiling for R

This commit is contained in:
Hyunsu Cho 2020-03-21 21:47:51 -07:00
parent 917b0a7b46
commit 3550b16a34
2 changed files with 7 additions and 3 deletions

View File

@ -663,7 +663,11 @@ void GHistIndexBlockMatrix::Init(const GHistIndexMatrix& gmat,
* \brief fill a histogram by zeroes * \brief fill a histogram by zeroes
*/ */
void InitilizeHistByZeroes(GHistRow hist, size_t begin, size_t end) { void InitilizeHistByZeroes(GHistRow hist, size_t begin, size_t end) {
#if defined(XGBOOST_STRICT_R_MODE) && XGBOOST_STRICT_R_MODE == 1
std::fill(hist.begin() + begin, hist.begin() + end, tree::GradStats());
#else // defined(XGBOOST_STRICT_R_MODE) && XGBOOST_STRICT_R_MODE == 1
memset(hist.data() + begin, '\0', (end-begin)*sizeof(tree::GradStats)); memset(hist.data() + begin, '\0', (end-begin)*sizeof(tree::GradStats));
#endif // defined(XGBOOST_STRICT_R_MODE) && XGBOOST_STRICT_R_MODE == 1
} }
/*! /*!

View File

@ -15,15 +15,15 @@
#include "xgboost/base.h" #include "xgboost/base.h"
#include "xgboost/tree_model.h" #include "xgboost/tree_model.h"
#if defined(XGBOOST_STRICT_R_MODE) #if defined(XGBOOST_STRICT_R_MODE) && XGBOOST_STRICT_R_MODE == 1
#define OBSERVER_PRINT LOG(INFO) #define OBSERVER_PRINT LOG(INFO)
#define OBSERVER_ENDL "" #define OBSERVER_ENDL ""
#define OBSERVER_NEWLINE "" #define OBSERVER_NEWLINE ""
#else #else // defined(XGBOOST_STRICT_R_MODE) && XGBOOST_STRICT_R_MODE == 1
#define OBSERVER_PRINT std::cout #define OBSERVER_PRINT std::cout
#define OBSERVER_ENDL std::endl #define OBSERVER_ENDL std::endl
#define OBSERVER_NEWLINE "\n" #define OBSERVER_NEWLINE "\n"
#endif // defined(XGBOOST_STRICT_R_MODE) #endif // defined(XGBOOST_STRICT_R_MODE) && XGBOOST_STRICT_R_MODE == 1
namespace xgboost { namespace xgboost {
/*\brief An observer for logging internal data structures. /*\brief An observer for logging internal data structures.