Fix SWIG methods that return char** (#2850)
* [swig] Fix SWIG methods that return char** with StringArray.
+ [new] Add StringArray class to manage and manipulate arrays of fixed-length strings:
This class is now used to wrap any char** parameters, manage memory and
manipulate the strings.
Such class is defined at swig/StringArray.hpp and wrapped in StringArray.i.
+ [API+fix] Wrap LGBM_BoosterGetFeatureNames it resulted in segfault before:
Added wrapper LGBM_BoosterGetFeatureNamesSWIG(BoosterHandle) that
only receives the booster handle and figures how much memory to allocate
for strings and returns a StringArray which can be easily converted to String[].
+ [API+safety] For consistency, LGBM_BoosterGetEvalNamesSWIG was wrapped as well:
* Refactor to detect any kind of errors and removed all the parameters
besides the BoosterHandle (much simpler API to use in Java).
* No assumptions are made about the required string space necessary (128 before).
* The amount of required string memory is computed internally
+ [safety] No possibility of undefined behaviour
The two methods wrapped above now compute the necessary string storage space
prior to allocation, as the low-level C API calls would crash the process
irreversibly if they write more memory than which is passed to them.
* Changes to C API and wrappers support char**
To support the latest SWIG changes that enable proper char**
return support that is safe, the C API was changed.
The respecive wrappers in R and Python were changed too.
* Cleanup indentation in new lightgbm_R.cpp code
* Adress review code-style comments.
* Update swig/StringArray.hpp
Co-Authored-By:
Nikita Titov <nekit94-08@mail.ru>
* Update python-package/lightgbm/basic.py
Co-Authored-By:
Nikita Titov <nekit94-08@mail.ru>
* Update src/lightgbm_R.cpp
Co-Authored-By:
Nikita Titov <nekit94-08@mail.ru>
Co-authored-by:
alberto.ferreira <alberto.ferreira@feedzai.com>
Co-authored-by:
Nikita Titov <nekit94-08@mail.ru>
Showing
swig/StringArray.hpp
0 → 100644
swig/StringArray.i
0 → 100644
Please register or sign in to comment