Простой пример typemap в swig java

Я пытаюсь обернуть собственную библиотеку С++ с помощью swig, и я застрял в попытке преобразовать time_t в C в long в Java. Я успешно использовал swig с python, но пока не могу заставить приведенную выше карту типов работать на Java. В питоне это выглядит так

%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 ???

Нужны ли мне карты типов, подобные приведенным ниже?

%typemap(jni) 
%typemap(jtype) 
%typemap(jstype) 

Мне нужно это, чтобы обернуть функции C следующим образом:

time_t manipulate_time (time_t dt);

person D R    schedule 12.05.2010    source источник


Ответы (2)


Вы должны взглянуть на эти разделы документации swig:

В базовых картах типов также есть множество «примеров», реализованных для примитивных типов. Вы можете найти их в \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"
person okutane    schedule 14.05.2010

Вы можете просто сделать вместо использования карт типов.

typedef long long time_t;
person sujithvm    schedule 14.05.2015