[Kazehakase-devel 2588] GBoxed化

Zurück zum Archiv-Index

Kouhei Sutou kou****@cozmi*****
2006年 1月 22日 (日) 14:18:29 JST


須藤です.

普通のGObjectではない構造体をGBoxedでGType化するための便利マ
クロKZ_BOXED_GET_TYPEを追加しました.


それでは早速使いかたをみていきましょう.

用意するものはこちらになります.

  * 構造体: これはGObject parent;とかがない普通のもので結構
            です.手元にある適当な構造体で代用できるのでちゃ
            ちゃっと作れて便利ですね.

  * コピー関数: 引数としてコピー元構造体を受け取って,コピー
                した構造体を返します.g_new0()して値を設定し
                ていくという簡単なもので構いません.

  * フリー関数: 引数として与えられた構造体を開放する関数です
                ね.何も返さなくてもよいです.単純なものなら
                g_freeで代用しちゃっても良いですよ.

ここでは,

  構造体をSampleStruct,
  コピー関数をsample_struct_copy,
  フリー関数をsample_struct_free,

とします.

えーと,それでは,そろそろ作業に入りましょうね.

まず,あらかじめ用意してある(だろう)ヘッダファイル
sample-struct.hに以下を追加します.

  #define TYPE_SAMPE_STRUCT  (sample_struct_get_type ())
  ...
  GType sample_struct_get_type(void) G_GNUC_CONST;
  ...
  /* コピー関数とかフリー関数があるはず */
  SampleStruct *sample_struct_copy (SampleStruct *struct);
  void          sample_struct_free (SampleStruct *struct);
  ...


簡単ですね.

次に,ソースファイルsample-struct.cに以下を追加します.

  #include "gobject-utils.h"

  KZ_BOXED_GET_TYPE(sample_struct, "SampleStruct",
                    sample_struct_copy, sample_struct_free)

はい,これだけです.

これなら5分もかからずにできちゃいますね.


具体的な例はテキストsrc/kz-embed-event.{c,h}に載っています.
参考にしてくださいね.
それでは.



Kazehakase-devel メーリングリストの案内
Zurück zum Archiv-Index