Patricia Tries (Perl の NET::Patricia) をラップして Python で公開しようとしています。クラスの1つに問題があります。
そのため、Python から見たパトリシア ノード (以下) のインスタンスには、「データ」プロパティがあります。読み取りはうまくいきますが、書き込みは壊れます。
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の本で読んだことから、これはデータへのポインタを渡す必要があることを意味すると思います。本によると:
また、生のポインター値を外部の python ライブラリーに渡す必要がある場合は、ポインター オブジェクトを整数にキャストすることでそれを行うことができます... ただし、逆の操作はできません。生の整数値からのポインター オブジェクト。
質問:
- 私はこれを正しく理解していますか?
- どうすればこれを回避できますか? %extends ですか? タイプマップ? 具体的にとても参考になります。
ノート:
- C ソースを変更することはできませんが、追加の .h ファイルまたはインターフェイス .i ファイルで拡張できます。
- 私が理解していることから、その「データ」フィールドには、私が本当に知らない「何か」の妥当な値の「何か」を含めることができるはずです。