blob: 2dae1f6dc7b5c15da62a3291b11cc7dfdae9abef [file] [log] [blame]
/* -------------------------------------------------------------
* SWIG library containing argc and argv multi-argument typemaps
* ------------------------------------------------------------- */
%typemap(cstype) (int ARGC, char **ARGV) "string[]"
%typemap(imtype) (int ARGC, char **ARGV) "global::System.IntPtr"
%typemap(ctype) (int ARGC, char **ARGV) "void*"
%typemap(csin) (int ARGC, char **ARGV) "$modulePINVOKE.SWIG_csharp_string_array_to_c($csinput.Length, $csinput)"
%pragma(csharp) imclasscode=%{
[global::System.Runtime.InteropServices.DllImport("$module", EntryPoint="SWIG_csharp_string_array_to_c")]
public static extern global::System.IntPtr SWIG_csharp_string_array_to_c(int len, [global::System.Runtime.InteropServices.In,global::System.Runtime.InteropServices.MarshalAs(global::System.Runtime.InteropServices.UnmanagedType.LPArray, ArraySubType=global::System.Runtime.InteropServices.UnmanagedType.LPStr, SizeParamIndex=0)] string[] array);
%}
%fragment("SWIG_csharp_string_array", "header") %{
#ifdef __cplusplus
extern "C" {
#endif
typedef struct { int len; char* array[1]; } SWIG_csharp_string_array;
static void* SWIG_csharp_string_array_free(SWIG_csharp_string_array *arr) {
if (arr != SWIG_NULLPTR) {
int i;
for(i = 0; i < arr->len; i++) {
free(arr->array[i]);
}
free(arr);
}
return SWIG_NULLPTR;
}
SWIGEXPORT void* SWIGSTDCALL SWIG_csharp_string_array_to_c(int len, void *array) {
int i;
size_t alen, slen;
char *p, **ptr;
SWIG_csharp_string_array *ret;
/* We don't need to add one to len for the terminating NULL here because
* SWIG_csharp_string_array includes one element already.
*/
alen = sizeof(SWIG_csharp_string_array) + sizeof(char *) * len;
ret = (SWIG_csharp_string_array *)malloc(alen);
if (ret == SWIG_NULLPTR) {
SWIG_CSharpSetPendingException(SWIG_CSharpOutOfMemoryException, "fail to duplicate array.");
return SWIG_NULLPTR;
}
memset(ret, 0, alen);
ret->len = len;
ptr = (char **)array;
for(i = 0; i < len; i++) {
slen = strlen(ptr[i]) + 1;
p = (char*)malloc(slen);
if (p == SWIG_NULLPTR) {
SWIG_CSharpSetPendingException(SWIG_CSharpOutOfMemoryException, "fail to alloc a string.");
return SWIG_csharp_string_array_free(ret);
}
memcpy(p, ptr[i], slen);
ret->array[i] = p;
}
ret->array[i] = SWIG_NULLPTR;
return ret;
}
#ifdef __cplusplus
}
#endif
%}
%typemap(in, canthrow=1, fragment="SWIG_csharp_string_array") (int ARGC, char **ARGV) %{
SWIG_csharp_string_array *arr = (SWIG_csharp_string_array*)$input;
if (arr != SWIG_NULLPTR) {
$1 = ($1_ltype)arr->len;
$2 = ($2_ltype)arr->array;
}
%}
%typemap(freearg, fragment="SWIG_csharp_string_array") (int ARGC, char **ARGV) %{
SWIG_csharp_string_array_free((SWIG_csharp_string_array*)$input);
%}