Files
2026-07-13 13:27:18 +08:00

99 lines
3.2 KiB
OpenEdge ABL

/*!
* Copyright (c) 2020-2026 Microsoft Corporation. All rights reserved.
* Copyright (c) 2020-2026 The LightGBM developers. All rights reserved.
* Licensed under the MIT License. See LICENSE file in the project root for license information.
*
* Author: Alberto Ferreira
*/
/**
* This wraps the StringArray.hpp class for SWIG usage,
* adding the basic C-style wrappers needed to make it
* usable for the users of the low-level lightgbmJNI API.
*/
%{
#include "../swig/StringArray.hpp"
%}
// Use SWIG's `various.i` to get a String[] directly in one call:
%apply char **STRING_ARRAY {char **StringArrayHandle_get_strings};
%inline %{
typedef void* StringArrayHandle;
/**
* @brief Creates a new StringArray and returns its handle.
*
* @param num_strings number of strings to store.
* @param string_size the maximum number of characters that can be stored in each string.
* @return StringArrayHandle or nullptr in case of allocation failure.
*/
StringArrayHandle StringArrayHandle_create(size_t num_strings, size_t string_size) {
try {
return new StringArray(num_strings, string_size);
} catch (std::bad_alloc &/*e*/) {
return nullptr;
}
}
/**
* @brief Free the StringArray object.
*
* @param handle StringArray handle.
*/
void StringArrayHandle_free(StringArrayHandle handle)
{
delete reinterpret_cast<StringArray *>(handle);
}
/**
* @brief Return the raw pointer to the array of strings.
* Wrapped in Java into String[] automatically.
*
* @param handle StringArray handle.
* @return Raw pointer to the string array which `various.i` maps to String[].
*/
char **StringArrayHandle_get_strings(StringArrayHandle handle)
{
return reinterpret_cast<StringArray *>(handle)->data();
}
/**
* For the end user to extract a specific string from the StringArray object.
*
* @param handle StringArray handle.
* @param index index of the string to retrieve from the array.
* @return raw pointer to string at index, or nullptr if out of bounds.
*/
char *StringArrayHandle_get_string(StringArrayHandle handle, int index)
{
return reinterpret_cast<StringArray *>(handle)->getitem(index);
}
/**
* @brief Replaces one string of the array at index with the new content.
*
* @param handle StringArray handle.
* @param index Index of the string to replace
* @param new_content The content to replace
* @return 0 (success) or -1 (error) in case of out of bounds index or too large content.
*/
int StringArrayHandle_set_string(StringArrayHandle handle, size_t index, const char* new_content)
{
return reinterpret_cast<StringArray *>(handle)->setitem(index, std::string(new_content));
}
/**
* @brief Retrieve the number of strings in the StringArray.
*
* @param handle StringArray handle.
* @return number of strings that the array stores.
*/
size_t StringArrayHandle_get_num_elements(StringArrayHandle handle)
{
return reinterpret_cast<StringArray *>(handle)->get_num_elements();
}
%}