39 lines
1.3 KiB
OpenEdge ABL
39 lines
1.3 KiB
OpenEdge ABL
/* -------------------------------------------------------------
|
|
* SWIG library containing argc and argv multi-argument typemaps
|
|
* ------------------------------------------------------------- */
|
|
|
|
/* Preserve string vector as is */
|
|
%typemap(scoercein) (int ARGC, char **ARGV) ""
|
|
/* Verify we pass the proper string vector */
|
|
%typemap(scheck) (int ARGC, char **ARGV) %{
|
|
assert(is.null($input) || (is.vector($input) && is.character($input)))
|
|
%}
|
|
/* Check argument is null or a string vector for dispatcher */
|
|
%typemap(rtypecheck) (int ARGC, char **ARGV) %{
|
|
is.null($arg) || (is.vector($arg) && is.character($arg))
|
|
%}
|
|
%typemap(in) (int ARGC, char **ARGV) {
|
|
$1_ltype i;
|
|
SEXP *pstr;
|
|
if ($input == R_NilValue) {
|
|
/* Empty array */
|
|
$1 = 0;
|
|
} else if (!Rf_isVectorAtomic($input) || TYPEOF($input) != STRSXP) {
|
|
SWIG_exception_fail(SWIG_RuntimeError, "Wrong array type.");
|
|
} else {
|
|
$1 = Rf_length($input);
|
|
pstr = CHARACTER_POINTER($input);
|
|
}
|
|
$2 = ($2_ltype) malloc(($1+1)*sizeof($*2_ltype));
|
|
if ($2 == SWIG_NULLPTR) {
|
|
SWIG_exception_fail(SWIG_MemoryError, "Memory allocation failed.");
|
|
}
|
|
for (i = 0; i < $1; i++) {
|
|
$2[i] = ($*2_ltype)STRING_VALUE(pstr[i]);
|
|
}
|
|
$2[i] = SWIG_NULLPTR;
|
|
}
|
|
%typemap(freearg,noblock=1) (int ARGC, char **ARGV) {
|
|
free((void *)$2);
|
|
}
|