Add finalizers to mlpack objects.
This commit is contained in:
@@ -32,8 +32,17 @@ function(append_type TYPES_FILE PROGRAM_NAME PROGRAM_MAIN_FILE)
|
||||
# function.
|
||||
file(APPEND
|
||||
"${TYPES_FILE}"
|
||||
"struct ${MODEL_SAFE_TYPE}\n"
|
||||
"mutable struct ${MODEL_SAFE_TYPE}\n"
|
||||
" ptr::Ptr{Nothing}\n"
|
||||
"\n"
|
||||
" # Construct object and set finalizer to free memory.\n"
|
||||
" function ${MODEL_SAFE_TYPE}(ptr::Ptr{Nothing})::${MODEL_SAFE_TYPE}\n"
|
||||
" result = new(ptr)\n"
|
||||
" finalizer(\n"
|
||||
" x -> _Internal.${PROGRAM_NAME}_internal.Delete${MODEL_SAFE_TYPE}(x.ptr),\n"
|
||||
" result)\n"
|
||||
" return result\n"
|
||||
" end\n"
|
||||
"end\n"
|
||||
"\n")
|
||||
endif ()
|
||||
|
||||
@@ -29,6 +29,8 @@ if (${NUM_MODEL_TYPES} GREATER 0)
|
||||
void* IO_GetParam${MODEL_SAFE_TYPE}Ptr(const char* paramName);
|
||||
// Set the pointer to a ${MODEL_TYPE} parameter.
|
||||
void IO_SetParam${MODEL_SAFE_TYPE}Ptr(const char* paramName, void* ptr);
|
||||
// Delete a ${MODEL_TYPE} pointer.
|
||||
void Delete${MODEL_SAFE_TYPE}Ptr(void* ptr);
|
||||
// Serialize a ${MODEL_TYPE} pointer.
|
||||
char* Serialize${MODEL_SAFE_TYPE}Ptr(void* ptr, size_t* length);
|
||||
// Deserialize a ${MODEL_TYPE} pointer.
|
||||
@@ -50,6 +52,13 @@ void IO_SetParam${MODEL_SAFE_TYPE}Ptr(const char* paramName, void* ptr)
|
||||
IO::SetPassed(paramName);
|
||||
}
|
||||
|
||||
// Delete a ${MODEL_TYPE} pointer.
|
||||
void Delete${MODEL_SAFE_TYPE}Ptr(void* ptr)
|
||||
{
|
||||
${MODEL_TYPE}* modelPtr = (${MODEL_TYPE}*) ptr;
|
||||
delete modelPtr;
|
||||
}
|
||||
|
||||
// Serialize a ${MODEL_TYPE} pointer.
|
||||
char* Serialize${MODEL_SAFE_TYPE}Ptr(void* ptr, size_t* length)
|
||||
{
|
||||
|
||||
@@ -59,15 +59,20 @@ void PrintParamDefn(
|
||||
// import ...<Type>
|
||||
//
|
||||
// function IOGetParam<Type>(paramName::String)
|
||||
// <Type>(ccall((:IOGetParam<Type>Ptr, <programName>Library),
|
||||
// <Type>(ccall((:IO_GetParam<Type>Ptr, <programName>Library),
|
||||
// Ptr{Nothing}, (Cstring,), paramName))
|
||||
// end
|
||||
//
|
||||
// function IOSetParam<Type>(paramName::String, model::<Type>)
|
||||
// ccall((:IOSetParam<Type>Ptr, <programName>Library), Nothing,
|
||||
// ccall((:IO_SetParam<Type>Ptr, <programName>Library), Nothing,
|
||||
// (Cstring, Ptr{Nothing}), paramName, model.ptr)
|
||||
// end
|
||||
//
|
||||
// function Delete<Type>(ptr::Ptr{Nothing})
|
||||
// ccall((:Delete<Type>Ptr, <programName>Library), Nothing,
|
||||
// (Ptr{Nothing},), ptr)
|
||||
// end
|
||||
//
|
||||
// function serialize<Type>(stream::IO, model::<Type>)
|
||||
// buf_len = UInt[0]
|
||||
// buffer = ccall((:Serialize<Type>Ptr, <programName>Library),
|
||||
@@ -111,6 +116,15 @@ void PrintParamDefn(
|
||||
std::cout << "end" << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
// Next, Delete<Type>().
|
||||
std::cout << "# Delete an instantiated model pointer." << std::endl;
|
||||
std::cout << "function Delete" << type << "(ptr::Ptr{Nothing})"
|
||||
<< std::endl;
|
||||
std::cout << " ccall((:Delete" << type << "Ptr, " << programName
|
||||
<< "Library), Nothing, (Ptr{Nothing},), ptr)" << std::endl;
|
||||
std::cout << "end" << std::endl;
|
||||
std::cout << std::endl;
|
||||
|
||||
// Now the serialization functionality.
|
||||
std::cout << "# Serialize a model to the given stream." << std::endl;
|
||||
std::cout << "function serialize" << type << "(stream::IO, model::" << type
|
||||
|
||||
Reference in New Issue
Block a user