gpt4 book ai didi

python - 使用 Swig、python 包装 Patricia Tries 的问题

转载 作者:太空宇宙 更新时间:2023-11-04 04:09:31 24 4
gpt4 key购买 nike

我正在尝试包装要在 python 中公开的 Patricia Tries(Perl 的 NET::Patricia)。我在其中一门课上遇到困难。

因此,从 python 来看,patricia 节点(下图)的实例具有“数据”属性。读取它很顺利,但写入它会中断。

typedef struct _patricia_node_t {
u_int bit; /* flag if this node used */
prefix_t *prefix; /* who we are in patricia tree */
struct _patricia_node_t *l, *r; /* left and right children */
struct _patricia_node_t *parent;/* may be used */
void *data; /* pointer to data */
void *user1; /* pointer to usr data (ex. route flap info) */
} patricia_node_t;

具体来说:

>>> N = patricia.patricia_node_t()
>>> assert N.data == None
>>> N.data = 1
TypeError: in method 'patricia_node_t_data_set', argument 2 of type 'void *'

现在我的C很弱。根据我在 SWIG 书中读到的内容,我认为这意味着我需要向它传递一个指向数据的指针。根据the book :

Also, if you need to pass the raw pointer value to some external python library, you can do it by casting the pointer object to an integer... However, the inverse operation is not possible, i.e., you can't build a Swig pointer object from a raw integer value.

问题:

  1. 我的理解正确吗?
  2. 我该如何解决这个问题?是 % 扩展吗?类型图?具体细节会很有帮助。

注意事项:

  1. 我无法更改 C 源代码,但我可以在其他 .h 文件或接口(interface) .i 文件中扩展它。
  2. 据我所知,“数据”字段应该能够包含“任何东西”,因为我真的不知道“任何东西”的一些合理值。

最佳答案

我有一段时间没有使用 SWIG,但我很确定你想要使用一个类型映射,它将采用 PyObject* 并将其转换为所需的 void* 反之亦然。当然,一定要跟踪引用计数。

关于python - 使用 Swig、python 包装 Patricia Tries 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/674494/

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