Я пытаюсь обернуть Patricia Tries (Perl's NET :: Patricia) для показа в python. У меня трудности с одним из классов.
Таким образом, экземпляры узла patricia (ниже), как видно из python, имеют свойство «data». Чтение идет нормально, а запись прерывается.
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 *'
Теперь мой С слаб. Из того, что я прочитал в книге SWIG, я думаю, что это означает, что мне нужно передать ему указатель на данные. Согласно книга :
Кроме того, если вам нужно передать необработанное значение указателя во внешнюю библиотеку python, вы можете сделать это, приведя объект указателя к целому числу ... Однако обратная операция невозможна, т. Е. Вы не можете построить объект указателя Swig из необработанного целочисленного значения.
Вопросы:
- правильно ли я понимаю?
- как мне обойти это? % Расширяется? TypeMap? Подробности будут очень полезны.
Примечания:
- Я не могу изменить источник C, но могу расширить его в дополнительных файлах .h или в файле интерфейса .i.
- Из того, что я понимаю, это поле "данные" должно содержать "что-нибудь" для некоторого разумного значения "чего-либо", чего я действительно не знаю.