私はPythonで公開されるPatricia Tries(PerlのNET :: Patricia)をラップしようとしています。私はクラスの1つで問題を抱えています。の問題パトリシアがSwigを使って試してみる、
したがって、pythonから見たpatriciaノード(下)には "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 *'
が今私のCが弱いです。私がSWIGの本で読んだことから、これはデータへのポインタを渡す必要があることを意味していると私は思う。 the bookによると:
また、あなたには、いくつかの外部のPythonライブラリに生のポインタ値を渡す必要がある場合、あなたは整数へのポインタオブジェクトをキャストすることによってそれを行うことができます...しかし、逆の操作を行うことはできませんつまり、生の整数値からSwigポインタオブジェクトを構築することはできません。
質問:
- 私はこれを正しく理解するのですか?
- どうすればこの問題を回避できますか? %は拡張ですか?タイプマップ?詳細は非常に役立つだろう。
注:
- 私はCのソースを変更することはできませんが、私は、追加の.hファイルまたは.iファイルインタフェースでそれを拡張することができます。
- 「データ」フィールドには、私が実際にはわからない「何か」の妥当な値の「何か」を含めることができるはずです。