зеркало из https://github.com/microsoft/LightGBM.git
[refactor] SWIG - Split pointer manipulation to individual .i file (#3538)
* [refactor] SWIG - Split pointer manipulation to individual .i file * Update module docstring * space
This commit is contained in:
Родитель
530b5cef0c
Коммит
716451b102
|
@ -279,102 +279,6 @@
|
|||
}
|
||||
%}
|
||||
|
||||
%pointer_functions(int, intp)
|
||||
%pointer_functions(long, longp)
|
||||
%pointer_functions(double, doublep)
|
||||
%pointer_functions(float, floatp)
|
||||
%pointer_functions(int64_t, int64_tp)
|
||||
%pointer_functions(int32_t, int32_tp)
|
||||
|
||||
%pointer_cast(int64_t *, long *, int64_t_to_long_ptr)
|
||||
%pointer_cast(int64_t *, double *, int64_t_to_double_ptr)
|
||||
%pointer_cast(int32_t *, int *, int32_t_to_int_ptr)
|
||||
%pointer_cast(long *, int64_t *, long_to_int64_t_ptr)
|
||||
%pointer_cast(double *, int64_t *, double_to_int64_t_ptr)
|
||||
%pointer_cast(int *, int32_t *, int_to_int32_t_ptr)
|
||||
|
||||
%pointer_cast(double *, void *, double_to_voidp_ptr)
|
||||
%pointer_cast(float *, void *, float_to_voidp_ptr)
|
||||
%pointer_cast(int *, void *, int_to_voidp_ptr)
|
||||
%pointer_cast(int32_t *, void *, int32_t_to_voidp_ptr)
|
||||
%pointer_cast(int64_t *, void *, int64_t_to_voidp_ptr)
|
||||
|
||||
/* Custom pointer manipulation template */
|
||||
%define %pointer_manipulation(TYPE, NAME)
|
||||
%{
|
||||
static TYPE *new_##NAME() { %}
|
||||
%{ TYPE* NAME = new TYPE; return NAME; %}
|
||||
%{}
|
||||
|
||||
static void delete_##NAME(TYPE *self) { %}
|
||||
%{ if (self) delete self; %}
|
||||
%{}
|
||||
%}
|
||||
|
||||
TYPE *new_##NAME();
|
||||
void delete_##NAME(TYPE *self);
|
||||
|
||||
%enddef
|
||||
|
||||
%define %pointer_dereference(TYPE, NAME)
|
||||
%{
|
||||
static TYPE NAME ##_value(TYPE *self) {
|
||||
TYPE NAME = *self;
|
||||
return NAME;
|
||||
}
|
||||
%}
|
||||
|
||||
TYPE NAME##_value(TYPE *self);
|
||||
|
||||
%enddef
|
||||
|
||||
%define %pointer_handle(TYPE, NAME)
|
||||
%{
|
||||
static TYPE* NAME ##_handle() { %}
|
||||
%{ TYPE* NAME = new TYPE; *NAME = (TYPE)operator new(sizeof(int*)); return NAME; %}
|
||||
%{}
|
||||
%}
|
||||
|
||||
TYPE *NAME##_handle();
|
||||
|
||||
%enddef
|
||||
|
||||
%define %long_array_functions(TYPE,NAME)
|
||||
%{
|
||||
static TYPE *new_##NAME(int64_t nelements) { %}
|
||||
%{ return new TYPE[nelements](); %}
|
||||
%{}
|
||||
|
||||
static void delete_##NAME(TYPE *ary) { %}
|
||||
%{ delete [] ary; %}
|
||||
%{}
|
||||
|
||||
static TYPE NAME##_getitem(TYPE *ary, int64_t index) {
|
||||
return ary[index];
|
||||
}
|
||||
static void NAME##_setitem(TYPE *ary, int64_t index, TYPE value) {
|
||||
ary[index] = value;
|
||||
}
|
||||
%}
|
||||
|
||||
TYPE *new_##NAME(int64_t nelements);
|
||||
void delete_##NAME(TYPE *ary);
|
||||
TYPE NAME##_getitem(TYPE *ary, int64_t index);
|
||||
void NAME##_setitem(TYPE *ary, int64_t index, TYPE value);
|
||||
|
||||
%enddef
|
||||
|
||||
%long_array_functions(double, doubleArray)
|
||||
%long_array_functions(float, floatArray)
|
||||
%long_array_functions(int, intArray)
|
||||
%long_array_functions(long, longArray)
|
||||
|
||||
%pointer_manipulation(void*, voidpp)
|
||||
|
||||
/* Allow dereferencing of void** to void* */
|
||||
%pointer_dereference(void*, voidpp)
|
||||
|
||||
/* Allow retrieving handle to void** */
|
||||
%pointer_handle(void*, voidpp)
|
||||
|
||||
%include "pointer_manipulation.i"
|
||||
%include "StringArray_API_extensions.i"
|
||||
|
|
|
@ -0,0 +1,114 @@
|
|||
/*!
|
||||
* Copyright (c) 2018 Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See LICENSE file in the project root for license information.
|
||||
*/
|
||||
/*!
|
||||
* This SWIG interface extension provides support to
|
||||
* the pointer manipulation methods present in the standard
|
||||
* SWIG wrappers, but with support for larger arrays.
|
||||
*
|
||||
* SWIG provides this in https://github.com/swig/swig/blob/master/Lib/carrays.i
|
||||
* but the standard methods only provide arrays with up to
|
||||
* max(int32_t) elements.
|
||||
*
|
||||
* The `long_array_functions` wrappers extend this
|
||||
* to arrays of size max(int64_t) instead of max(int32_t).
|
||||
*/
|
||||
|
||||
%pointer_functions(int, intp)
|
||||
%pointer_functions(long, longp)
|
||||
%pointer_functions(double, doublep)
|
||||
%pointer_functions(float, floatp)
|
||||
%pointer_functions(int64_t, int64_tp)
|
||||
%pointer_functions(int32_t, int32_tp)
|
||||
|
||||
%pointer_cast(int64_t *, long *, int64_t_to_long_ptr)
|
||||
%pointer_cast(int64_t *, double *, int64_t_to_double_ptr)
|
||||
%pointer_cast(int32_t *, int *, int32_t_to_int_ptr)
|
||||
%pointer_cast(long *, int64_t *, long_to_int64_t_ptr)
|
||||
%pointer_cast(double *, int64_t *, double_to_int64_t_ptr)
|
||||
%pointer_cast(int *, int32_t *, int_to_int32_t_ptr)
|
||||
|
||||
%pointer_cast(double *, void *, double_to_voidp_ptr)
|
||||
%pointer_cast(float *, void *, float_to_voidp_ptr)
|
||||
%pointer_cast(int *, void *, int_to_voidp_ptr)
|
||||
%pointer_cast(int32_t *, void *, int32_t_to_voidp_ptr)
|
||||
%pointer_cast(int64_t *, void *, int64_t_to_voidp_ptr)
|
||||
|
||||
/* Custom pointer manipulation template */
|
||||
%define %pointer_manipulation(TYPE, NAME)
|
||||
%{
|
||||
static TYPE *new_##NAME() { %}
|
||||
%{ TYPE* NAME = new TYPE; return NAME; %}
|
||||
%{}
|
||||
|
||||
static void delete_##NAME(TYPE *self) { %}
|
||||
%{ if (self) delete self; %}
|
||||
%{}
|
||||
%}
|
||||
|
||||
TYPE *new_##NAME();
|
||||
void delete_##NAME(TYPE *self);
|
||||
|
||||
%enddef
|
||||
|
||||
%define %pointer_dereference(TYPE, NAME)
|
||||
%{
|
||||
static TYPE NAME ##_value(TYPE *self) {
|
||||
TYPE NAME = *self;
|
||||
return NAME;
|
||||
}
|
||||
%}
|
||||
|
||||
TYPE NAME##_value(TYPE *self);
|
||||
|
||||
%enddef
|
||||
|
||||
%define %pointer_handle(TYPE, NAME)
|
||||
%{
|
||||
static TYPE* NAME ##_handle() { %}
|
||||
%{ TYPE* NAME = new TYPE; *NAME = (TYPE)operator new(sizeof(int*)); return NAME; %}
|
||||
%{}
|
||||
%}
|
||||
|
||||
TYPE *NAME##_handle();
|
||||
|
||||
%enddef
|
||||
|
||||
%define %long_array_functions(TYPE,NAME)
|
||||
%{
|
||||
static TYPE *new_##NAME(int64_t nelements) { %}
|
||||
%{ return new TYPE[nelements](); %}
|
||||
%{}
|
||||
|
||||
static void delete_##NAME(TYPE *ary) { %}
|
||||
%{ delete [] ary; %}
|
||||
%{}
|
||||
|
||||
static TYPE NAME##_getitem(TYPE *ary, int64_t index) {
|
||||
return ary[index];
|
||||
}
|
||||
static void NAME##_setitem(TYPE *ary, int64_t index, TYPE value) {
|
||||
ary[index] = value;
|
||||
}
|
||||
%}
|
||||
|
||||
TYPE *new_##NAME(int64_t nelements);
|
||||
void delete_##NAME(TYPE *ary);
|
||||
TYPE NAME##_getitem(TYPE *ary, int64_t index);
|
||||
void NAME##_setitem(TYPE *ary, int64_t index, TYPE value);
|
||||
|
||||
%enddef
|
||||
|
||||
%long_array_functions(double, doubleArray)
|
||||
%long_array_functions(float, floatArray)
|
||||
%long_array_functions(int, intArray)
|
||||
%long_array_functions(long, longArray)
|
||||
|
||||
%pointer_manipulation(void*, voidpp)
|
||||
|
||||
/* Allow dereferencing of void** to void* */
|
||||
%pointer_dereference(void*, voidpp)
|
||||
|
||||
/* Allow retrieving handle to void** */
|
||||
%pointer_handle(void*, voidpp)
|
Загрузка…
Ссылка в новой задаче