Как обработать 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
, а не просто непрозрачный указатель.