ruby.h

type* ALLOC(type)

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

type* ALLOC_N(type, n)

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

type* ALLOCA_N(type, n)

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

int BUILTIN_TYPE(VALUE obj)

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

void Check_SafeStr(VALUE v)

古い API です。SafeStringValue を使ってください。

void Check_Type(VALUE val, int typeflag)

val の構造体型フラグが typeflag でなければ 例外 TypeError を発生します。val は即値の VALUE であっても 構いません。

VALUE CHR2FIX(char x)
VALUE CLASS_OF(VALUE obj)

obj のクラスを返します。

void CLONESETUP(VALUE clone, VALUE obj)
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);
}
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_PTR(VALUE dta)

実際は struct RData* 型である dta から、 それがラップしているポインタを取り出します。

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);
}
void DUPSETUP(dup, obj)
int FIX2INT(VALUE x)
long FIX2LONG(VALUE x)
unsigned int FIX2UINT(VALUE x)
unsigned long FIX2ULONG(VALUE x)
int FIXABLE(long f)
int FIXNUM_FLAG
long FIXNUM_MAX

Fixnum にできる整数の上限値。

long FIXNUM_MIN

Fixnum にできる整数の下限値。

int FIXNUM_P(VALUE obj)

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

int FL_ABLE(VALUE x)

x が即値の VALUE でなければ真。

void FL_REVERSE(VALUE x, int f)
void FL_SET(VALUE x, int f)
int FL_TEST(VALUE x, int f)
void FL_UNSET(VALUE x, int f)
VALUE ID2SYM(ID id)

id を Symbol に変換します。

unsigned long IMMEDIATE_MASK
int IMMEDIATE_P(VALUE obj)

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

VALUE INT2FIX(int i)

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

VALUE INT2NUM(long i)

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

int ISALNUM(char c)
int ISALPHA(char c)
int ISASCII(char c)
int ISDIGIT(char c)
int ISLOWER(char c)
int ISPRINT(char c)
int ISSPACE(char c)
int ISUPPER(char c)
int ISXDIGIT(char c)
VALUE LL2NUM(long long v)
VALUE LONG2FIX(long i)
VALUE LONG2NUM(long v)
int MEMCMP(p1, p2, type, n)

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

void MEMCPY(p1, p2, type, n)

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

void MEMMOVE(p1, p2, type, n)

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

void MEMZERO(p, type, n)

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

int NEGFIXABLE(long f)
NEWOBJ(obj, int typeflag)
int NIL_P(VALUE obj)

objQnil のとき真。

char NUM2CHR(VALUE x)
double NUM2DBL(VALUE x)
int NUM2INT(VALUE x)
long NUM2LONG(VALUE x)
unsigned int NUM2UINT(VALUE x)
unsigned long NUM2ULONG(VLAUE x)
void OBJ_FREEZE(VALUE x)
int OBJ_FROZEN(VALUE x)
void OBJ_INFECT(VALUE dest, VALUE src)
void OBJ_TAINT(VALUE x)
int OBJ_TAINTED(VALUE x)
void OBJSETUP(obj, VALUE klass, int typeflag)
int POSFIXABLE(long f)
st *R_CAST(st)
struct RArray *RARRAY(VALUE obj)
VALUE rb_fix_new(long v)
VALUE rb_int_new(long v)
int rb_safe_level(void)

現在のセーフレベルを返します。

VALUE rb_uint_new(unsigned int v)
struct RBasic *RBASIC(VALUE obj)
struct RBignum *RBIGNUM(VALUE obj)
struct RClass *RCLASS(VALUE obj)
struct RData *RDATA(VALUE obj)
type* REALLOC_N(var, type, n)

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

struct RFile *RFILE(VALUE obj)
struct RFloat *RFLOAT(VALUE obj)
struct RHash *RHASH(VALUE obj)
struct RClass *RMODULE(VALUE obj)
struct RObject *ROBJECT(VALUE obj)
struct RRegexp *RREGEXP(VALUE obj)
struct RString *RSTRING(VALUE obj)
struct RStruct *RSTRUCT(VALUE obj)
int RTEST(VALUE obj)

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

RUBY_DATA_FUNC(func)

任意の関数へのポインタ func を struct RData の dmark/dfree の 値として適する型に強制キャストします。

RUBY_METHOD_FUNC(func)

任意の関数へのポインタ func を Ruby のメソッドの実体として適する 型に強制キャストします。

SafeStringValue(v)

StringValue と同じく、val が String でなければ to_str メソッドを 使って String に変換します。同時に rb_check_safe_str() によるチェックも 行います。

int SPECIAL_CONST_P(VALUE obj)

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

char *STR2CSTR(VALUE str)

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

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

STR2CSTR() は、与えられたオブジェクトが文字列でなく to_str メソッ ドを持つ場合、内部で to_str を呼び出して暗黙の型変換を行い、 それが保持する文字列ポインタを返します。 しかし、このAPIでは暗黙の型変換結果となるオブジェクトがどこからも 保持されないため、注意して使用しないと結果が GC される可能性があります。

version 1.7 以降では代わりに StringValuePtr() を使用します。こちら は、引数の参照先が暗黙の型変換の結果に置き換わるため変換結果が GC されません。(version 1.7 では、STR2CSTR() は、obsolete です)

StringValue() は、引数が to_str による暗黙の型変換を期待する 場合に使用します。

StringValue(VALUE val)

val が String でなければ to_str メソッドを使って String に変換します。

このマクロに渡した VALUE は ruby の GC から確実に保護されます。

char *StringValuePtr(VALUE val)

val が String でなければ to_str メソッドを使って String に変換し、 その実体のポインタを返します。

このマクロに渡した VALUE は ruby の GC から確実に保護されます。

int SYM2ID(VALUE symbol)

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

int SYMBOL_FLAG
int SYMBOL_P(VALUE obj)

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

int TYPE(VALUE obj)

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

VALUE UINT2NUM(unsigned long i)

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

VALUE ULL2NUM(unsigned long long n)
VALUE ULONG2NUM(unsigned long n)
VALUE UINT2FIX(unsigned int i)

unsigned int を Fixnum に変換します。