SWIG JAVA 类型映射配置
SWIG JAVA typemaps configuration
这是 SWIG 类型映射,可将 C++ 类型转换为 Python 类型。
#ifdef SWIGPYTHON
%typemap(in) (char *data, size_t datasize) {
Py_ssize_t len;
PyBytes_AsStringAndSize($input, &, &len);
= (size_t)len;
}
%typemap(in, numinputs=0) (char **data, size_t *datasize)(char *temp, size_t tempsize) {
= &temp;
= &tempsize;
}
%typemap(argout) (char **data, size_t *datasize) {
if(*) {
$result = PyBytes_FromStringAndSize(*, *);
free(*);
}
}
#endif
你能做同样的事情吗,但是 java 语言?所以答案会像
#ifdef SWIGJAVA
%typemap(in) (char *data, size_t datasize) {
convertJavaBytesToC++Bytes();
...something else...
}
...
所以我需要它来生成正确的 JAVA 包装代码
我想翻译成的 C++ 函数声明 JAVA:
public void getFrames(char **data, size_t *datasize) {
std::string s = getFramesAsString();
size_t size = s.length();
char *c = new char[size];
s.copy(c, size, 0);
*datasize = size;
*data = c;
};
public void putFrame(char *data, size_t datasize) {
const std::lock_guard<std::mutex> lock(frames_mtx);
frames.push_front(std::string(data, datasize));
};
SWIG 已经有一个 Java 的类型映射,可以为您完成此操作。要使用它,您需要做的就是使用 %apply
告诉 SWIG 它是您要用于这些参数的内容:
例如
%module test
%apply (char *STRING, size_t LENGTH) { (char *data, size_t datasize) }
void putFrame(char *data, size_t datasize);
这将生成以下 Java 函数:
public static void putFrame(byte[] data) {
...
与您想要的语义完全匹配。
这是 SWIG 类型映射,可将 C++ 类型转换为 Python 类型。
#ifdef SWIGPYTHON
%typemap(in) (char *data, size_t datasize) {
Py_ssize_t len;
PyBytes_AsStringAndSize($input, &, &len);
= (size_t)len;
}
%typemap(in, numinputs=0) (char **data, size_t *datasize)(char *temp, size_t tempsize) {
= &temp;
= &tempsize;
}
%typemap(argout) (char **data, size_t *datasize) {
if(*) {
$result = PyBytes_FromStringAndSize(*, *);
free(*);
}
}
#endif
你能做同样的事情吗,但是 java 语言?所以答案会像
#ifdef SWIGJAVA
%typemap(in) (char *data, size_t datasize) {
convertJavaBytesToC++Bytes();
...something else...
}
...
所以我需要它来生成正确的 JAVA 包装代码
我想翻译成的 C++ 函数声明 JAVA:
public void getFrames(char **data, size_t *datasize) {
std::string s = getFramesAsString();
size_t size = s.length();
char *c = new char[size];
s.copy(c, size, 0);
*datasize = size;
*data = c;
};
public void putFrame(char *data, size_t datasize) {
const std::lock_guard<std::mutex> lock(frames_mtx);
frames.push_front(std::string(data, datasize));
};
SWIG 已经有一个 Java 的类型映射,可以为您完成此操作。要使用它,您需要做的就是使用 %apply
告诉 SWIG 它是您要用于这些参数的内容:
例如
%module test
%apply (char *STRING, size_t LENGTH) { (char *data, size_t datasize) }
void putFrame(char *data, size_t datasize);
这将生成以下 Java 函数:
public static void putFrame(byte[] data) {
...
与您想要的语义完全匹配。