gpt4 book ai didi

java - 为多个参数对定义一次 SWIG 类型映射

转载 作者:行者123 更新时间:2023-12-02 02:01:31 28 4
gpt4 key购买 nike

我已使用特定于两个参数的类型和名称的 %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));
}

我可以使用 C++ 方法,例如:

int32_t getArrayData( void * outBuffer, int32_t bufferLen );

进入 Java 绑定(bind),例如:

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”。
  • 通过从上面的 %typemaps 中删除所有参数名称来匹配所有 void*/int32_t 参数对。
  • 对 *.i 文件运行预处理器。

这在 SWIG 中可行吗?

最佳答案

11.1.4 Reusing typemaps 中的 SWIG 手册中所述和 11.2.3 Copying a typemap您可以使用 %apply 轻松复制其他签名或类型的现有(多参数)类型映射。在你的情况下,你可能需要

%apply (void *outBuffer, int32_t bufferLen) { (void *outBuffer1, int32_t bufferLen1) };

(void *outBuffer, int32_t bufferLen) 存在的所有类型映射复制到 (void *outBuffer1, int32_t bufferLen1)

关于java - 为多个参数对定义一次 SWIG 类型映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51505405/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com