Я пытаюсь перенести собственную библиотеку C++ с помощью большого глотка, и я застреваю при попытке преобразовать time_t
в C, к long
в Java. Я успешно использовал большой глоток с Python, но до сих пор я не могу заставить вышеупомянутое typemap работать в Java. В Python это похоже на это
%typemap(in) time_t
{
if (PyLong_Check($input))
$1 = (time_t) PyLong_AsLong($input);
else if (PyInt_Check($input))
$1 = (time_t) PyInt_AsLong($input);
else if (PyFloat_Check($input))
$1 = (time_t) PyFloat_AsDouble($input);
else {
PyErr_SetString(PyExc_TypeError,"Expected a large number");
return NULL;
}
}
%typemap(out) time_t
{
$result = PyLong_FromLong((long)$1);
}
Я предполагаю в карте от Java до C, был бы:
%typemap(in) time_t {
$1 = (time_t) $input;
}
Как я завершился бы карта от C до Java?
%typemap(out) time_t ???
Мне был бы нужен typemaps как те ниже?
%typemap(jni)
%typemap(jtype)
%typemap(jstype)
Мне нужно это для обертывания функций C как это:
time_t manipulate_time (time_t dt);
Вам стоит взглянуть на эти разделы документации swig:
В базовых typemaps также есть много "примеров", которые реализованы для примитивных типов. Вы можете найти их в \swig\Lib\java\java.swg
Я не знаю, работает это или нет, но может быть что-то подобное подойдет для ваших нужд?
%typemap(jni) time_t "jlong"
%typemap(jtype) time_t "long"
%typemap(jstype) time_t "long"
%typemap(out) time_t %{ $result = (jlong)$1; %}
%typemap(in) time_t "(time_t)$input"