我已经使用%typemap特定于两个参数的类型和名称成功地将缓冲区指针/缓冲区长度对映射到 ByteBuffer 。
对于同一方法中的多对参数,没有类型映射的近乎冗余的副本,并且没有仅按类型匹配,我该如何做同样的事情?
细节
例如,使用这些类型映射:
%typemap(jni) (void *outBuffer, int32_t bufferLen ) "jobject"
%typemap(jtype) (void *outBuffer, int32_t bufferLen) "java.nio.ByteBuffer"
%typemap(jstype) (void *outBuffer, int32_t bufferLen) "java.nio.ByteBuffer"
%typemap(javain) (void *outBuffer, int32_t bufferLen)
"$javainput"
%typemap(javaout) (void *outBuffer, int32_t bufferLen) {
return $jnicall;
}
%typemap(in) (void *outBuffer, int32_t bufferLen) {
$1 = jenv->GetDirectBufferAddress($input);
$2 = (long)(jenv->GetDirectBufferCapacity($input));
}
我可以 SWIG 一个 C++ 方法,如:
int32_t getArrayData( void * outBuffer, int32_t bufferLen );
进入 Java 绑定,如:
public int getArrayData( java.nio.ByteBuffer outBuffer ) { ...}
但是现在我想 SWIG 一个 C++ 方法来接受两个参数对:
int32_t getArrayData( void * outBuffer, int32_t bufferLen,
void * outBuffer1, int32_t bufferLen1 );
并进入 Java:
public int getArrayData( java.nio.ByteBuffer outBuffer,
java.nio.ByteBuffer outBuffer1 ) {
没有:
复制%typemaps以上所有内容并在每个参数名称的末尾添加一个“1”。
通过从上面删除所有参数名称来匹配所有void*/int32_t参数对%typemaps。
在 *.i 文件上运行预处理器。
这在 SWIG 中可行吗?
喵喔喔
相关分类