From: Kouhei S. <ko...@co...> - 2011-12-07 11:56:11
|
須藤です。 In <CAM...@ma...> "Re: [ruby-gnome2-devel-ja] リストからrubyオブジェクトへの変換について" on Wed, 7 Dec 2011 00:08:37 +0900, Masaaki Aoyagi <mas...@gm...> wrote: > まだ確認してないのでpull requestはまだですが、取り敢えず > https://github.com/masaakiaoyagi/ruby-gnome2/commits/glist2rval > のような感じで実装してみました。 > * 要素の変換関数も渡せるようにして、公開するシンボルを少なくする > * rbg_filename_gslist_to_array_freeもまとめられるようにする > * prefixをrbgutilからrbgにする > といったところを当初の予定から変更しています。 だいたいよいと思います! いくつか気になった点はこんなところです。 * ToRValueFuncはRGConvFuncとか「RG」(RBG?)プレフィックス みたいにした方がよさそう。(関数名のプレフィックスと同じ ような感じで。) * GType固定にしないで、gpointerを渡すようにして、使う人が 好きなデータを渡せるようにするとGLibっぽくてよいかも。 (でも、オーバースペックかもしれない。) 例えば、g_list_sorted_with_data()がそういうインターフェ イスで、他にもいろいろあるはず。 http://developer.gnome.org/glib/stable/glib-Doubly-Linked-Lists.html#g-list-sort-with-data * #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ ... #ifdef __cplusplus } #endif /* __cplusplus */ の代わりに G_BEGIN_DECLS ... G_END_DECLS を使うのがGLibっぽくてよさそう。 http://developer.gnome.org/glib/stable/glib-Miscellaneous-Macros.html#G-BEGIN-DECLS:CAPS http://developer.gnome.org/glib/stable/glib-Miscellaneous-Macros.html#G-END-DECLS:CAPS > ちなみに、GListとGSListの現在の定義が > struct GList { > gpointer data; > GList *next; > GList *prev; > }; > struct GSList { > gpointer data; > GSList *next; > }; > となっていて、もしGListがGSList+prevという構造であることが保証されていれば > GList版とGSList版で関数を分けずにまとめられるなぁとか思ったのですが、 > そんな保証されてないですよね? そうですねぇ。 まず変わることはないと思いますが、そこに依存するのはやめた方 がいいと思います。 |