我已使用特定于两个参数的类型和名称的%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 ) { ...}
但是现在我想切换一个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
参数对。在SWIG中这可行吗?
答案 0 :(得分:2)
如11.1.4 Reusing typemaps和11.2.3 Copying a typemap中的SWIG手册中所述,您可以使用%apply
轻松地将现有(多参数)类型映射复制为其他签名或类型。在您的情况下,您可能需要
%apply (void *outBuffer, int32_t bufferLen) { (void *outBuffer1, int32_t bufferLen1) };
将(void *outBuffer, int32_t bufferLen)
存在的所有类型映射复制到(void *outBuffer1, int32_t bufferLen1)
。