diff --git a/src/mlpack/bindings/julia/julia_util.cpp b/src/mlpack/bindings/julia/julia_util.cpp index d888b10296..4bf027fb9c 100644 --- a/src/mlpack/bindings/julia/julia_util.cpp +++ b/src/mlpack/bindings/julia/julia_util.cpp @@ -66,7 +66,7 @@ void IO_SetParamBool(const char* paramName, bool paramValue) * Call IO::SetParam>() to set the length. */ void IO_SetParamVectorStrLen(const char* paramName, - const size_t length) + const size_t length) { IO::GetParam>(paramName).clear(); IO::GetParam>(paramName).resize(length); @@ -77,8 +77,8 @@ void IO_SetParamVectorStrLen(const char* paramName, * Call IO::SetParam>() to set an individual element. */ void IO_SetParamVectorStrStr(const char* paramName, - const char* str, - const size_t element) + const char* str, + const size_t element) { IO::GetParam>(paramName)[element] = std::string(str); @@ -88,8 +88,8 @@ void IO_SetParamVectorStrStr(const char* paramName, * Call IO::SetParam>(). */ void IO_SetParamVectorInt(const char* paramName, - int* ints, - const size_t length) + int* ints, + const size_t length) { // Create a std::vector object; unfortunately this requires copying the // vector elements. @@ -106,10 +106,10 @@ void IO_SetParamVectorInt(const char* paramName, * Call IO::SetParam(). */ void IO_SetParamMat(const char* paramName, - double* memptr, - const size_t rows, - const size_t cols, - const bool pointsAsRows) + double* memptr, + const size_t rows, + const size_t cols, + const bool pointsAsRows) { // Create the matrix as an alias. arma::mat m(memptr, arma::uword(rows), arma::uword(cols), false, true); @@ -121,10 +121,10 @@ void IO_SetParamMat(const char* paramName, * Call IO::SetParam>(). */ void IO_SetParamUMat(const char* paramName, - size_t* memptr, - const size_t rows, - const size_t cols, - const bool pointsAsRows) + size_t* memptr, + const size_t rows, + const size_t cols, + const bool pointsAsRows) { // Create the matrix as an alias. arma::Mat m(memptr, arma::uword(rows), arma::uword(cols), false, @@ -138,8 +138,8 @@ void IO_SetParamUMat(const char* paramName, * Call IO::SetParam(). */ void IO_SetParamRow(const char* paramName, - double* memptr, - const size_t cols) + double* memptr, + const size_t cols) { arma::rowvec m(memptr, arma::uword(cols), false, true); IO::GetParam(paramName) = std::move(m); @@ -150,8 +150,8 @@ void IO_SetParamRow(const char* paramName, * Call IO::SetParam>(). */ void IO_SetParamURow(const char* paramName, - size_t* memptr, - const size_t cols) + size_t* memptr, + const size_t cols) { arma::Row m(memptr, arma::uword(cols), false, true); IO::GetParam>(paramName) = std::move(m); @@ -162,8 +162,8 @@ void IO_SetParamURow(const char* paramName, * Call IO::SetParam(). */ void IO_SetParamCol(const char* paramName, - double* memptr, - const size_t rows) + double* memptr, + const size_t rows) { arma::vec m(memptr, arma::uword(rows), false, true); IO::GetParam(paramName) = std::move(m); @@ -174,8 +174,8 @@ void IO_SetParamCol(const char* paramName, * Call IO::SetParam>(). */ void IO_SetParamUCol(const char* paramName, - size_t* memptr, - const size_t rows) + size_t* memptr, + const size_t rows) { arma::Col m(memptr, arma::uword(rows), false, true); IO::GetParam>(paramName) = std::move(m); @@ -186,11 +186,11 @@ void IO_SetParamUCol(const char* paramName, * Call IO::SetParam>(). */ void IO_SetParamMatWithInfo(const char* paramName, - bool* dimensions, - double* memptr, - const size_t rows, - const size_t cols, - const bool pointsAreRows) + bool* dimensions, + double* memptr, + const size_t rows, + const size_t cols, + const bool pointsAreRows) { data::DatasetInfo d(pointsAreRows ? cols : rows); for (size_t i = 0; i < d.Dimensionality(); ++i) @@ -316,6 +316,9 @@ double* IO_GetParamMat(const char* paramName) else { arma::access::rw(mat.mem_state) = 1; + #if ARMA_VERSION_MAJOR >= 10 + arma::access::rw(mat.n_alloc) = 0; + #endif return mat.memptr(); } } @@ -344,20 +347,19 @@ size_t IO_GetParamUMatCols(const char* paramName) size_t* IO_GetParamUMat(const char* paramName) { arma::Mat& mat = IO::GetParam>(paramName); - - // Are we using preallocated memory? If so we have to handle this more - // carefully. if (mat.n_elem <= arma::arma_config::mat_prealloc) { // Copy the memory to something that we can give back to Julia. size_t* newMem = new size_t[mat.n_elem]; arma::arrayops::copy(newMem, mat.mem, mat.n_elem); - // We believe Julia will free it. Hopefully we are right. - return newMem; + return newMem; // We believe Julia will free it. Hopefully we are right. } else { arma::access::rw(mat.mem_state) = 1; + #if ARMA_VERSION_MAJOR >= 10 + arma::access::rw(mat.n_alloc) = 0; + #endif return mat.memptr(); } } @@ -390,6 +392,9 @@ double* IO_GetParamCol(const char* paramName) else { arma::access::rw(vec.mem_state) = 1; + #if ARMA_VERSION_MAJOR >= 10 + arma::access::rw(vec.n_alloc) = 0; + #endif return vec.memptr(); } } @@ -410,20 +415,19 @@ size_t IO_GetParamUColRows(const char* paramName) size_t* IO_GetParamUCol(const char* paramName) { arma::Col& vec = IO::GetParam>(paramName); - - // Are we using preallocated memory? If so we have to handle this more - // carefully. if (vec.n_elem <= arma::arma_config::mat_prealloc) { // Copy the memory to something we can give back to Julia. size_t* newMem = new size_t[vec.n_elem]; arma::arrayops::copy(newMem, vec.mem, vec.n_elem); - // We believe Julia will free it. Hopefully we are right. - return newMem; + return newMem; // We believe Julia will free it. Hopefully we are right. } else { arma::access::rw(vec.mem_state) = 1; + #if ARMA_VERSION_MAJOR >= 10 + arma::access::rw(vec.n_alloc) = 0; + #endif return vec.memptr(); } } @@ -456,6 +460,9 @@ double* IO_GetParamRow(const char* paramName) else { arma::access::rw(vec.mem_state) = 1; + #if ARMA_VERSION_MAJOR >= 10 + arma::access::rw(vec.n_alloc) = 0; + #endif return vec.memptr(); } } @@ -476,9 +483,6 @@ size_t IO_GetParamURowCols(const char* paramName) size_t* IO_GetParamURow(const char* paramName) { arma::Row& vec = IO::GetParam>(paramName); - - // Are we using preallocated memory? If so we have to handle this more - // carefully. if (vec.n_elem <= arma::arma_config::mat_prealloc) { // Copy the memory to something we can give back to Julia. @@ -489,6 +493,9 @@ size_t* IO_GetParamURow(const char* paramName) else { arma::access::rw(vec.mem_state) = 1; + #if ARMA_VERSION_MAJOR >= 10 + arma::access::rw(vec.n_alloc) = 0; + #endif return vec.memptr(); } } @@ -547,6 +554,9 @@ double* IO_GetParamMatWithInfoPtr(const char* paramName) else { arma::access::rw(m.mem_state) = 1; + #if ARMA_VERSION_MAJOR >= 10 + arma::access::rw(m.n_alloc) = 0; + #endif return m.memptr(); } }