DL::Importableをextendしたモジュールに構造体/共用体を定義する機能を与える。
define_struct(contents)
struct(contents)
構造体を定義する。 contentsについては Struct::new を参照せよ。
define_union(contents)
union(contents)
共用体を定義する。
contentsについては上記define_struct
と同様である。
DL::PtrData
のラッパー用クラス。
ドット形式で構造体や共用体の要素へアクセスできるようになる。
Struct,Unionのインスタンスのmalloc,newメソッドを呼ぶことによって、
Memoryクラスのインスタンスが生成できる。そのため、通常、直接生成する必要はない。
Memory.new(ptr, names, ty, len, enc, dec)
DL::PtrDataオブジェクトptrの各メンバへアクセスするためのメソッドを 動的に定義する。Struct,Unionのインスタンスがこれらの情報を保持する。
Struct.new(types, contents)
typesにはDL::Typesのインスタンス、contentsには構造体の定義を 以下のようにして与える。
["int size", "char *str"]
このようにして生成されたStructオブジェクトは、以下の構造体のように振舞う。
struct { int size; char *str; }
new(ptr)
DL::PtrData オブジェクト ptr を保持する Memory オブジェクトを返す。
malloc(size = nil)
sizeバイトの領域を確保してDL::PtrDataオブジェクトを生成し、その DL::PtrDataオブジェクトを保持するMemoryオブジェクトを返す。
共用体に対するクラスである以外は、Structとほぼ同じ。
上記メソッドやクラスは、実際にはDL::Importable::Internalに定義されている。