[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[dennou-ruby:000807] Re: SWIG + NArray (2)



小塚様:

堀之内です。

> FORTRANの例に続き、Cの場合についてのチュートリアルを書きました。
> http://www.unyo.marushin.media.kyoto-u.ac.jp/~kozuka/swig-f-9.html

遅まきながら、読んでみました。

まずマイナーなミスの話ですが、C のソースで #include 以下が抜けて
ます。<stdio.h> とか <stdlib.h> ですね。あと、test8_c.c 冒頭のプ
ロトタイプ宣言が char *trans(char *original, int width); となっ
てて height が抜けてます。

さて、内容についてですが、なんとか swig 適用後の手作業の書き換え
をなくすことは出来ないでしょうか。これは、test8.i に引数間の関係
を記述出来れば不可能ではないと思うのですが。今は

   char *trans(char *ARRAY, int LENGTH, int LENGTH);

となってますが、例えば

   char *trans(char *ARRAY(LENGTH1,LENGTH2), int LENGTH1, int LENGTH2);

として、ARRAY から LENGTH1, LENGTH2 を取り出す規則を書ければ、入
力引数に関する問題は解決しますね。さらに、

   char *(LENGTH1,LENGTH2) trans(char *ARRAY(LENGTH1,LENGTH2), int LENGTH1, int LENGTH2);

と書いて、char *(LENGTH1,LENGTH2) に関する出力引数定義法を適切に
記述できれば、swig の結果を手作業で修正する必要はなくなるでしょ
う。

GNU Scientific Library (http://sources.redhat.com/gsl/) のように、
配列が長さ情報込の構造体になってる場合はいいんですが、長さを別引
数で渡すライブラリーでラップしたいのは多いので、手作業はしないで
済むに越したことはありません。


堀之内 武                    horinout@xxxxxx
京都大学宙空電波科学研究センター        phone:0774-38-3812  
611-0011 宇治市五ヶ庄                     fax:0774-31-8463