使用带有swig和numpy.i的stdint

时间:2015-12-16 15:23:19

标签: python c++ numpy swig stdint

我正在开发一个模块,用于在基于c inline的Python代码中使用swig。 为此,我想在numpy中访问C个数组。到目前为止,我使用了unsigned short之类的C类型,但我想使用uint16_t中的stdint.h类型来保存模块遇到的任何编译器。

不幸的是c++ - 函数在使用stdint.h类型时无法正确包装。给出的错误是:_setc() takes exactly 2 arguments (1 given)。这意味着,该函数不会被包装以接受numpy数组。当我使用例如,错误不会发生unsigned short

您有什么想法,如何将swig地图numpy数组转换为stdint-types

interface.i不工作:

/* interface.i */
extern int __g();
%}
%include "stdint.i"
%include "numpy.i"

%init %{
import_array();
%}
%apply (uint16_t* INPLACE_ARRAY3, int DIM1) {(uint16_t* seq, int n1)};
extern int __g();

c++功能不起作用:

#include "Python.h"
#include <stdio.h>
#include <stdint.h>
extern uint16_t* c;
extern int Dc;
extern int Nc[4];
void _setc(uint16_t *seq, int n1, int n2, int n3)
{
    c = seq;
    Nc[0] = n1;
    Nc[1] = n2;
    Nc[2] = n3;
}

interface.i正在工作:

/* interface.i */
extern int __g();
%}
%include "stdint.i"
%include "numpy.i"

%init %{
import_array();
%}
%apply (unsigned short* INPLACE_ARRAY3, int DIM1) {(unsigned short* seq, int n1)};
extern int __g();

c++功能正常:

#include "Python.h"
#include <stdio.h>
#include <stdint.h>
extern unsigned short* c;
extern int Dc;
extern int Nc[4];
void _setc(unsigned short *seq, int n1, int n2, int n3)
{
    c = seq;
    Nc[0] = n1;
    Nc[1] = n2;
    Nc[2] = n3;
}

1 个答案:

答案 0 :(得分:1)

哈哈,在我放弃并发布这个问题后的几分钟,我找到了一些“解决方案”。

我编辑了C以符合我的原因: 我在行3044 ff:

中用stdint.h类型替换了旧的[..] /* Concrete instances of the %numpy_typemaps() macro: Each invocation * below applies all of the typemaps above to the specified data type. */ %numpy_typemaps(int8_t , NPY_BYTE , int) %numpy_typemaps(uint8_t , NPY_UBYTE , int) %numpy_typemaps(int16_t , NPY_SHORT , int) %numpy_typemaps(uint16_t , NPY_USHORT , int) %numpy_typemaps(int32_t , NPY_INT , int) %numpy_typemaps(uint32_t , NPY_UINT , int) %numpy_typemaps(long , NPY_LONG , int) %numpy_typemaps(unsigned long , NPY_ULONG , int) %numpy_typemaps(int64_t , NPY_LONGLONG , int) %numpy_typemaps(uint64_t, NPY_ULONGLONG, int) %numpy_typemaps(float , NPY_FLOAT , int) %numpy_typemaps(double , NPY_DOUBLE , int) [..] 类型
numpy.i

我想知道是否有人比编辑EditText

更好

干杯 约亨