|
From: Masao M. <mu...@hi...> - 2002-06-16 16:15:53
|
むとうです。
さかいさんのglibですが、遅ればせながらざっと見てみました。
短い期間にここまで作るのってすごいですね。私には無理かも...(^^;)。
んで、一応、質問など。
正直確認してないのにコメントしてるところがありますがご容赦ください。
他の方も何かコメントあったらメールしてくださいね。
ここって、Ruby-GNOME2のキモの部分だと思いますんで奮ってご参加ください。
#このメールに対しても、glibのソースに対してでも構いません。
====
全体:
・関数の宣言を他(gtkとか)と合わせませんか?
static
VALUE hoge
↓
static VALUE
hoge
rbglib.c:
前から疑問だったのですが...gErrorって使っていないですよね。
もし使っていないようだったら削除しちゃいませんか?
gError = rb_define_class_under(mGLib, "Error", rb_eRuntimeError);
rbgobj_object.c:
・rbgobj_set_gobj()で、
・Data_Wrap_Struct(rb_cData, cinfo->mark, &g_object_unref, gobj);
って、&が必要ですか?(gtkなんかはこのパターンの時、使っていないので...)
・/* XXX */のところでcinfoがNULLの時ってあるんですか?
異常系のみの場合は、rb_bug()かなんかの方が良くないですか?
・clear_gobject()って使う予定アリですか?
・rbgobj_make_gobject()を廃止してrbgobj_make_gobject_auto_type()に
統合しちゃマズイですかね?
んで、名前も汎用的なモノにしてgtk/gnome等でも使うと。
なんか、この辺、複雑すぎる気がするんですよね...。
・_gobject_to_ruby(), _gobject_from_ruby()って何に使うんですか?
(不勉強ですみません)
・gobj_smethod_added()って何に使うんでしょうか?
rbgobj_param.c:
・例えば、rb_define_method(rbgobj_cParamSpec, "name", &get_name, 0);
で、&get_nameなのはなぜでしょうか。
・rbgobj_param_spec_get_struct()とrbgobj_param_spec_wrap()って、
Ruby/GTKで言うところのget_xxxxとmake_xxxxですよね....。この辺の
名称ってできればRuby/GTK統一したいですね...。
#この辺、後述します。
===
以下、提案
・rbgobj_class_info形を RGObjClassInfoみたいに大文字使ってちょっと短く
して、かつ、いかにも型っぽくしません?
・rbgobj_class_infoですが、新たに2つのメンバを追加しませんか。
struct _rbgobj_class_info {
VALUE klass;
GType gtype;
void (*mark)(GObject *);
void (*free)(GObject *);
void (*ref)(GObject *);
void (*unref)(GObject *);
};
んで、rbgobj_gobject.cのrbgobj_set_gobject()を以下のような感じ。
----------------
void
rbgobj_set_gobject(obj, gobj)
VALUE obj;
GObject* gobj;
{
VALUE data;
const rbgobj_class_info* cinfo = rbgobj_lookup_class(rb_class_of(obj));
if (cinfo)
cinfo->ref(gobj);
data = Data_Wrap_Struct(rb_cData, cinfo->mark, cinfo->unref, gobj);
else
data = Data_Wrap_Struct(rb_cData, gobj_mark, g_object_unref, gobj);
/* ↑ここ必要かなぁ? */
g_object_set_data_full(gobj, RUBY_GOBJECT_OBJ_KEY,
(gpointer)obj, delete_gobject);
rb_ivar_set(obj, id_relatives, Qnil);
rb_ivar_set(obj, id_gobject_data, data);
st_add_direct(gobject_object_list, (char*)obj, (char*)obj);
}
----------------
こうすれば、make_hoge()って全部マクロにできると思うんですよね。
#rbgtk.cとか独自でhoge_refしてるところは全部修正しないとですがきれいに
#なるかなと。
===
よくわかってないのでとんちんかんなことを言っているかもしれませんが...
rbgobj_value.cのrbgobj_gvalue_to_rvalue()とrbgobj_rvalue_to_gvalue()ですが、
これって、結局のところVALUE<->GValueの相互自動変換ですよね?
であれば、rbgobj_make_gobject()とかも同様のメソッド名で統一できたらすっきり
しそうな気がするのですがいかがでしょう?
rbgobj_gvalue2r()
rbgobj_r2gvalue()
rbgobj_gobj2r() → rbgobj_get_value_from_gobject(),rbgobj_make_gobject()の置き換え
rbgobj_r2gobj() →rbgobj_get_gobject()の置き換え
無理かなぁ?実装してもいないで勝手に言ってます。すみません(^^;)
--
.:% Masao Mutoh<mu...@hi...>
|