type 型のメモリを割り当てる。
type 型のメモリを n 個割り当てる。
type 型のメモリを n 個スタックフレームに割り当てる。 このメモリは関数が終わると自動的に解放される。
obj の構造体型 ID を返します。
SPECIAL_CONST_P(obj)
が真のオブジェクトに対して使うと落ちます。
古い API です。SafeStringValue を使ってください。
val の構造体型フラグが typeflag でなければ
例外 TypeError
を発生します。val は即値の VALUE であっても
構いません。
obj のクラスを返します。
Ruby のオブジェクト obj から type 型へのポインタを とりだし svar に代入します。
使用例
struct mytype { int i; char *s; }; VALUE my_i(self) VALUE self; { struct mytype *m; Data_Get_Struct(self, struct mytype, m); return INT2NUM(m->i); }
type 型の構造体をヒープに割り当ててそれへのポインタを svar に代入し、クラス klass のインスタンスである Ruby のオブジェクトを生成し、それを返します。mark free はそれぞれマーク用・解放用の関数へのポインタです。 どちらも、必要ないときはかわりに 0 を渡します。
また RUBY_DATA_FUNC
の定義は以下のようです。
typedef void (*RUBY_DATA_FUNC)(void *st)
第一引数 st には svar の値が渡されます。
使用例
struct mytype { int i; char *s; }; VALUE my_s_new(klass) VALUE klass; { struct mytype *dummy; return Data_Make_Struct(MyClass, struct mytype, mark_my, free_my, dummy); }
実際は struct RData* 型である dta から、 それがラップしているポインタを取り出します。
C の構造体 sval をラップして klass クラスの インスタンスである Ruby オブジェクトを生成し、それを返します。 mark、free はそれぞれ sval のマーク用・解放用の 関数へのポインタです。どちらも、必要ないときはかわりに 0 を渡します。
また RUBY_DATA_FUNC
の定義は以下のようです。
typedef void (*RUBY_DATA_FUNC)(void *st)
第一引数 st には sval が渡されます。
使用例
struct mytype { int i; char *s; }; VALUE my_s_new(klass) VALUE klass; { struct mytype *m = malloc(sizeof(struct mytype)); m->i = 0; m->s = 0; return Data_Wrap_Struct(MyClass, 0, free_my, m); }
Fixnum にできる整数の上限値。
Fixnum にできる整数の下限値。
obj が Fixnum
のインスタンスのとき真。
x が即値の VALUE でなければ真。
id を Symbol に変換します。
obj がポインタでないとき真。すなわち現在の実装では
Symbol
か Fixnum
のインスタンスであるとき真。
31ビット以内におさまる整数を Fixnum に変換します。
任意の整数を Fixnum か Bignum に変換します。
type 型のメモリ領域 p1 と p2 の先頭 n 個を比較する。 p1 が p2 の最初の n 個より小さい、等しい、大きいとき、そ れぞれ正、0、負の値を返す。
type 型のメモリ領域 p2 のうち先頭の n 個を p1 にコピーする。
type 型のメモリ領域 p2 のうち先頭の n 個を p1 に移動する。
type 型のメモリ領域 p をゼロクリアする。 n は要素数。
obj が Qnil
のとき真。
現在のセーフレベルを返します。
type 型のメモリ領域 var のサイズを n 個に変更する。
obj が Qfalse
でも Qnil
でもないとき真。
任意の関数へのポインタ func を struct RData の dmark/dfree の 値として適する型に強制キャストします。
任意の関数へのポインタ func を Ruby のメソッドの実体として適する 型に強制キャストします。
StringValue と同じく、val が String でなければ to_str メソッドを 使って String に変換します。同時に rb_check_safe_str() によるチェックも 行います。
obj が実体の構造体を持たないとき真。現時点で真になるのは
Qnil
Qtrue
Qfalse
と、
Fixnum
/Symbol
のインスタンス。
Ruby のオブジェクト str から C の文字列を取り出します。
str が String
でない場合は to_str
によって
変換を試みます。
返り値を free したり直接書き換えたりしてはいけません。
STR2CSTR() は、与えられたオブジェクトが文字列でなく to_str メソッ ドを持つ場合、内部で to_str を呼び出して暗黙の型変換を行い、 それが保持する文字列ポインタを返します。 しかし、このAPIでは暗黙の型変換結果となるオブジェクトがどこからも 保持されないため、注意して使用しないと結果が GC される可能性があります。
version 1.7 以降では代わりに StringValuePtr() を使用します。こちら は、引数の参照先が暗黙の型変換の結果に置き換わるため変換結果が GC されません。(version 1.7 では、STR2CSTR() は、obsolete です)
StringValue() は、引数が to_str による暗黙の型変換を期待する 場合に使用します。
val が String でなければ to_str メソッドを使って String に変換します。
このマクロに渡した VALUE は ruby の GC から確実に保護されます。
val が String でなければ to_str メソッドを使って String に変換し、 その実体のポインタを返します。
このマクロに渡した VALUE は ruby の GC から確実に保護されます。
Symbol symbol を数値に変換します。 1.4では、FIX2INT(symbol)と同じです。
obj が Symbol
のインスタンスのとき真。
obj の構造体型 ID を返します。
任意の整数を Fixnum か Bignum に変換します。
unsigned int を Fixnum に変換します。