class Fiddle::CStruct

要約

C の構造体を表すクラスです。

このクラスは直接は使わず、Fiddle::Importer#struct を用いてこのクラスを継承したクラスを生成し、それを利用します。

Fiddle::Importer#struct が生成するクラスには構造体の各メンバへのアクセサが定義されています。このアクセサはシグネチャの型とメンバ名に従って定義されます。例えば

require 'fiddle/import'
include Fiddle::Importer
S = struct(["long foo", "void* bar"])

とすると、 S#foo, S#foo= というアクセサが Integer とやりとりするように定義され、 S#bar, S#bar= というアクセサが Fiddle::Pointer でやりとりするように定義されます。

このクラスは実際にはこのドキュメントに書かれているメソッドを保持していません。 Fiddle::Importer#struct によって動的にメソッドが定義されます。このドキュメントは説明の便宜のためだと考えてください。

目次

特異メソッド
インスタンスメソッド

特異メソッド

malloc -> Fiddle::CStruct[permalink][rdoc]

構造体のためのメモリを確保し、Fiddle::CStruct の(子孫クラスの) オブジェクトで返します。

C における

return (struct foo*)malloc(sizeof(struct foo));

というコードと対応していると言えます。

new(addr) -> Fiddle::CStruct[permalink][rdoc]

addr のアドレスが指すメモリを構造体のアドレスとみなし、構造体を作ります。

C におけるキャストと似ています。

return (struct foo*)addr;

というコードと対応していると言えます。

[PARAM] addr:
アドレス
size -> Integer[permalink][rdoc]

構造体のサイズをバイト数で返します。

このメソッドが返す値は C の構造体としてのサイズです。 Ruby のオブジェクトとしてはより大きなメモリを消費しています。

インスタンスメソッド

to_i -> Integer[permalink][rdoc]

保持している構造体の先頭アドレスを整数で返します。

to_ptr -> Fiddle::Pointer[permalink][rdoc]

保持している構造体へのポインタを返します。