[英]SWIG JAVA typemaps configuration
這是 SWIG 類型映射,它將 C++ 類型轉換為 Python 類型。
#ifdef SWIGPYTHON
%typemap(in) (char *data, size_t datasize) {
Py_ssize_t len;
PyBytes_AsStringAndSize($input, &$1, &len);
$2 = (size_t)len;
}
%typemap(in, numinputs=0) (char **data, size_t *datasize)(char *temp, size_t tempsize) {
$1 = &temp;
$2 = &tempsize;
}
%typemap(argout) (char **data, size_t *datasize) {
if(*$1) {
$result = PyBytes_FromStringAndSize(*$1, *$2);
free(*$1);
}
}
#endif
你能做同樣的事情,但是對於 java 語言? 所以答案會像
#ifdef SWIGJAVA
%typemap(in) (char *data, size_t datasize) {
convertJavaBytesToC++Bytes();
...something else...
}
...
所以我需要它來生成正確的 JAVA 包裝代碼
Function 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 function:
public static void putFrame(byte[] data) {
...
這與您想要的語義完全匹配。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.