[TOP][UP][<-PREV][NEXT->]

ruby.h

VALUE Data_Wrap_Struct(VALUE klass, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free, void *sval)

C の構造体 sval をラップして klass クラスの インスタンスである Ruby オブジェクトを生成し、それを返します。 markfree はそれぞれ 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);
}
VALUE Data_Make_Struct(VALUE klass, type, RUBY_DATA_FUNC mark, RUBY_DATA_FUNC free, type *svar)

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);
}
void Data_Get_Struct(VALUE obj, type, type *svar)

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);
}
int SYM2ID(VALUE symbol)

Symbol symbol を数値に変換します。 1.4では、FIX2INT(symbol)と同じです。

VALUE INT2FIX(int i)

31ビット以内におさまる整数を Fixnum に変換します。

VALUE INT2NUM(long i)

任意の整数を Fixnum か Bignum に変換します。

VALUE UNIT2FIX(unsigned int i)

31ビット以内におさまる整数を Fixnum に変換します。

VALUE UINT2NUM(unsigned long i)

任意の整数を Fixnum か Bignum に変換します。

char *STR2CSTR(VALUE str)

Ruby のオブジェクト str から C の文字列を取り出します。 strString でない場合は to_str によって 変換を試みます。

返り値を free したり直接書き換えたりしてはいけません。

int RTEST(VALUE obj)

objQfalse でも Qnil でもないとき真。

VALUE CLASS_OF(VALUE obj)

obj のクラスを返します。

int TYPE(VALUE obj)

obj の構造体型 ID を返します。

int BUILTIN_TYPE(VALUE obj)

obj の構造体型 ID を返します。 SPECIAL_CONST_P(obj) が真のオブジェクトに対して使うと落ちます。

int SPECIAL_CONST_P(VALUE obj)

obj が実体の構造体を持たないとき真。現時点で真になるのは Qnil Qtrue Qfalse と、 FixnumSymbol のインスタンス。

int NIL_P(VALUE obj)

objQnil のとき真。

int IMMEDIATE_P(VALUE obj)

obj がポインタでないとき真。すなわち現在の実装では SymbolFixnum のインスタンスであるとき真。

int FIXNUM_P(VALUE obj)

objFixnum のインスタンスのとき真。

int SYMBOL_P(VALUE obj)

objSymbol のインスタンスのとき真。

type* ALLOC_N(type, n)

type 型のメモリを n 個割り当てる。

type* ALLOC(type)

type 型のメモリを割り当てる。

type* REALLOC_N(var, type, n)

type 型のメモリ領域 var のサイズを n 個に変更する。

type* ALLOCA_N(type, n)

type 型のメモリを n 個スタックフレームに割り当てる。 このメモリは関数が終わると自動的に解放される。

void MEMZERO(p, type, n)

type 型のメモリ領域 p をゼロクリアする。 n は要素数。

void MEMCPY(p1, p2, type, n)

type 型のメモリ領域 p2 のうち先頭の n 個を p1 にコピーする。

void MEMMOVE(p1, p2, type, n)

type 型のメモリ領域 p2 のうち先頭の n 個を p1 に移動する。

int MEMCMP(p1, p2, type, n)

type 型のメモリ領域 p1p2 の先頭 n 個を比較する。 p1p2 の最初の n 個より小さい、等しい、大きいとき、そ れぞれ正、0、負の値を返す。


[TOP][UP][<-PREV][NEXT->]