type 型のメモリを割り当てる。
type 型のメモリを n 個割り当てる。
type 型のメモリを n 個スタックフレームに割り当てる。 このメモリは関数が終わると自動的に解放される。
obj の構造体型 ID を返します。
SPECIAL_CONST_P(obj)
が真のオブジェクトに対して使うと落ちます。
古い API です。SafeStringValue を使ってください。
val の構造体型フラグが typeflag でなければ
例外 TypeError
を発生します。val は即値の VALUE であっても
構いません。
char 型の整数 x を Ruby の Fixnum に変換します。
obj のクラスを返します。 この場合の「クラス」とは C レベルのクラス、 つまり RBasic 構造体の klass メンバの値です。 また、構造体を持たない Fixnum などに対しても正常に働きます。
OBJSETUP() の変種。 clone を、obj から clone で作った オブジェクトとして初期化します。
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); }
OBJSETUP() の変種。 dup を、obj から dup で作った オブジェクトとして初期化します。
Fixnum を int に変換します。 返り値が int の範囲から外れる場合は RangeError が発生します。
Fixnum を long に変換します。 返り値が long の範囲から外れる場合は RangeError が発生します。
Fixnum を unsigned int に変換します。 返り値が unsigned int の範囲から外れる場合は RangeError が発生します。
Fixnum を unsigned long に変換します。 返り値が unsigned long の範囲から外れる場合は RangeError が発生します。
f が Fixnum の範囲に収まっているなら真。
Fixnum にできる整数の上限値。
Fixnum にできる整数の下限値。
obj が Fixnum
のインスタンスのとき真。
x が即値の VALUE でなければ真。
x のフラグ f を反転する。
x に対してフラグ f をセットする。
x のフラグ f が立っていたら真。
x のフラグ f をクリアする。
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
のとき真。
src に汚染マークが付いていたら dest も汚染する。
x に汚染マークを付ける。
x に汚染マークが付いていたら真。
obj をクラス klass とフラグ typeflag で初期化する。 $SAFE >= 3 のときは無条件で汚染する。
f が Fixnum の上限値以下ならば真。
obj を struct RArray* にキャストする。 本当は obj が struct RArray* でないとしてもキャストしてしまう。
現在のセーフレベルを返します。
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 に変換します。