まつもと ゆきひろです

swigrubyへの注文があります。

  * CのintをRubyのtrue/falseに変換するpragmaが欲しい。

    Rubyでは0がfalseでないので、そのまま変換したのでは期待通
    りに動作しないので、このint型の関数は実はbooleanとしての
    戻り値であることを示すpragmaが欲しいです。実際には

       %{
       typedef int rb_Bool;
       %}

       typedef int rb_Bool;

       %typemap(ruby,in) rb_Bool * {
           $target = RTEST($source);
       }
       %typemap(ruby,out) rb_Bool {
           $target = ($source)?Qtrue:Qfalse;
       }

    のような方法で対応できないでもないですが、やはりまとめた
    いのが人情です。

  * 述語メソッドの識別子に `?' を付けるpragmaが欲しい。

    現状では`?'をRuby側のメソッド名にする方法が無い(と思う) 
    ので、Rubyらしくすためには人手でラッパーを作る必要があり
    ます。せっかくSWIGを使っているのに、それは嬉しくない。こ
    れもpragmaで対応できませんでしょうか?

両方とも述語(booleanを返すメソッド)に関するものですから、一
つのpragmaで兼用しても私としては可です。いかがでしょう?

                                まつもと ゆきひろ /:|)