PackedStruct

2007-11-25

るびまに、データの構造をDSLで指定してシリアライズできるPackedStructクラスが書いてある。 これを使えば

def struct(&block)
PackedStruct.define(&block)
end

LVITEM = struct {
UINT :mask;
int :iItem;
int :iSubItem;
UINT :state;
UINT :stateMask;
LPSTR :pszText;
int :cchTextMax;
int :iImage;
LPARAM :lParam;
int :iIndent;
int :iGroupId;
UINT :cColumns;
PUINT :puColumns;
};

おぉ、Cの構造体の定義がほぼそのまま持ってこれる。 pack_templateを何度も書かなくていいし、これはすばらしい!

PackedStruct 内で特異クラスが定義してあって、そこで int32LE とか string とかDSLで使える型定義の関数が定義されてるんだけど、これを外から簡単に拡張できるといいな~と思ったんだけど、特異クラスの部分にメソッド追加したり継承したりするやり方がわからず…。