Как обработать ptrdiff_t в сгенерированной SWIG оболочке Java?

У меня есть эта структура в C:

typedef struct THTensor {
  ...
  ptrdiff_t storageOffset;
  ...
} THTensor;

Однако сгенерированный SWIG Java-код:

public SWIGTYPE_p_ptrdiff_t getStorageOffset() {
    return new SWIGTYPE_p_ptrdiff_t(THJNI.THFloatTensor_storageOffset_get(this.swigCPtr, this), true);
}

я хотел бы, что ptrdiff_t преобразуется в long на яве, не это SWIGTYPE_p_ptrdiff_t, в котором я не могу получить доступ к фактическому long значение.

Как я могу контролировать это в SWIG?

1 ответ

Решение

Есть несколько вариантов... Но ptrdiff_t неизвестно SWIG и определить его так же, как long это не лучшая идея
Я бы сделал следующее: добавить %include <stdint.i> в файл интерфейса, а затем либо добавьте в файл интерфейса:

%define ptrdiff_t
intptr_t
%enddef

или добавьте в исходный код:

#ifdef SWIG
  %define ptrdiff_t
  intptr_t
  %enddef
#endif // SWIG
...
typedef struct THTensor {
  ...
  ptrdiff_t storageOffset;
  ...
} THTensor;

Таким образом, код, заключенный в интерфейс, должен иметь соответствующую интерпретацию ptrdiff_t, а не просто непрозрачный указатель.

Другие вопросы по тегам