Ruby 4.1 リファレンスマニュアル

C API 関数一覧

Ruby の C API(C 言語 API)の関数の一覧です。Ruby 本体や拡張ライブラリの開発に使うもので、Ruby プログラムから直接呼び出す関数ではありません。

ALLOC

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

ALLOC_N

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

ALLOCA_N

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

BUILTIN_TYPE

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

Check_Type

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

CHR2FIX

char 型の整数 x を Ruby の Fixnum に変換します。

CLASS_OF

obj のクラスを返します。この場合の「クラス」とは C レベルのクラス、つまり RBasic 構造体の klass メンバの値です。また、構造体を持たない Fixnum などに対しても正常に働きます。

CLONESETUP

OBJSETUP() の変種。 clone を、obj から clone で作ったオブジェクトとして初期化します。

DATA_PTR

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

DUPSETUP

OBJSETUP() の変種。 dup を、obj から dup で作ったオブジェクトとして初期化します。

FIX2INT

Fixnum を int に変換します。返り値が int の範囲から外れる場合は RangeError が発生します。

FIX2LONG

Fixnum を long に変換します。 Fixnum は常に long に収まります。

FIX2UINT

Fixnum を unsigned int に変換します。返り値が unsigned int の範囲から外れる場合は RangeError が発生します。

FIX2ULONG

Fixnum を unsigned long に変換します。範囲のチェックは行われません。負の Fixnum を渡した場合は例外にはならず、 2 の補数表現をそのまま unsigned long として解釈した大きな値を返します。

FIXABLE

f が Fixnum の範囲に収まっているなら真。

FIXNUM_MAX

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

FIXNUM_MIN

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

FIXNUM_P

obj が Fixnum のインスタンスのとき真。

FL_ABLE

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

FL_REVERSE

x のフラグ f を反転する。

FL_SET

x に対してフラグ f をセットする。

FL_TEST

x のフラグ f が立っていたら真。

FL_UNSET

x のフラグ f をクリアする。

HAVE_RB_LEN_T

rb_len_t と rb_ulen_t、および LEN2NUM や NUM2LEN、PRIdLEN などのマクロが使えることを示すマクロです。値は 1 です。古い版もサポートする拡張ライブラリは、これが未定義のときに typedef long rb_len_t; やマクロを自前で定義して代用できます。

ID2SYM

id を Symbol に変換します。

IMMEDIATE_P

obj が即値でかつ真な値であるとき真。すなわち現在の実装では obj が Symbol か Fixnum のインスタンスであるか、 Qtrue のとき真。

INT2FIX

Fixnum におさまることが自明な整数を Fixnum に変換します。なお、Fixnum の幅は long の幅 - 1 です。

INT2NUM

任意の整数を Integer に変換します。 INT2FIX と異なり、Fixnum におさまらない整数も扱えます。

ISALNUM
ISALPHA
ISASCII
ISDIGIT

cが'0'から'9'のとき真。それ以外は偽。

ISLOWER
ISPRINT
ISSPACE
ISUPPER
ISXDIGIT

cが’0’から’9’、’a’から’f’、’A’から’F’のとき真。それ以外は偽。

LEN2NUM

rb_len_t の値 n を Fixnum か Bignum に変換します。 rb_len_t が long の環境では LONG2NUM、64 ビットの mswin では LL2NUM と同じです。

LL2NUM 例
long long n = 42;
VALUE num = LL2NUM(n); // (long longの整数42をRubyのオブジェクトに変換)
LONG2FIX

INT2FIX と同じです。

LONG2NUM
MEMCMP

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

MEMCPY

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

MEMMOVE

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

MEMZERO

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

NEGFIXABLE

f が Fixnum の下限値以上ならば真。

NIL_P

obj が Qnil のとき真。

NUM2CHR
NUM2DBL
NUM2INT

x を int 型の整数に変換します。

NUM2LEN

x を rb_len_t に変換します。 rb_len_t が long の環境では NUM2LONG、64 ビットの mswin では NUM2LL と同じです。 rb_len_t の範囲に収まらないときは RangeError が発生します。

NUM2LL

Numeric のオブジェクト x を、C の long long に変換します。逆の変換には LL2NUM を使います。

NUM2LONG

x を long 型の整数に変換します。

NUM2OFFT

Numeric のオブジェクト x を、C の off_t に変換します。 off_t の大きさに応じて、long long、long、int への変換のどれかと同じになります。

NUM2SHORT

x を short 型の整数に変換します。

NUM2SIZET

Integer のオブジェクト x を、C の size_t に変換します。

NUM2SSIZET

Integer のオブジェクト x を、C の ssize_t に変換します。

NUM2UINT

x を unsigned int 型の整数に変換します。

NUM2ULL

Numeric のオブジェクト x を、C の unsigned long long に変換します。

NUM2ULONG

x を unsigned long 型の整数に変換します。

NUM2USHORT

x を unsigned short 型の整数に変換します。

OBJ_FREEZE
OBJ_FROZEN
OBJSETUP

obj をクラス klass とフラグ typeflag で初期化する。

POSFIXABLE

f が Fixnum の上限値以下ならば真。

PRIdLEN

rb_len_t の値を printf 系の関数で出力するための書式指定子です。 PRIdLEN、PRIiLEN、PRIoLEN、PRIuLEN、PRIxLEN、PRIXLEN があり、それぞれ d、i、o、u、x、X 変換に対応します。 "%" PRIdLEN のように書式文字列に連結して使います。 rb_len_t の幅に合わせて、long の環境では "l"、64 ビットの mswin では 64 ビット整数用の接頭辞が付きます。

RARRAY

obj を struct RArray* にキャストする。本当は obj が struct RArray* でないとしてもキャストしてしまう。

rb_add_event_hook

インタプリタのイベントに対するフック関数を登録します。 events に指定したイベントが起きると func が呼ばれます。

rb_alias

クラス klass に定義されたメソッド name の本体を実体とする新しいメソッド def を定義します。

rb_alias_variable
rb_any_to_s

Object#to_s の実体です。

rb_apply

オブジェクト recv のメソッド mid を引数 args とともに呼び出します。

rb_Array

obj が Array でない場合は to_a を使って Array に変換します。

rb_ary_aref

argc が 1 のときは ary[*argv]、 2 のときは ary[argv[0], argv[1]] を返します。

rb_ary_cat

配列 ary の末尾に、train が指す len 個のオブジェクトを破壊的に追加します。

rb_ary_clear

ary.clear

rb_ary_concat

ary.concat x

rb_ary_delete

ary.delete

rb_ary_entry

ary のインデックス offset の要素を返します。

rb_ary_includes

ary.include? item

rb_ary_new

空の Ruby の配列を作成し返します。

rb_ary_new2

長さ len 分だけメモリを確保した、長さゼロの Ruby の配列を作成し返します。

rb_ary_new3

長さ n で要素に i0 i1 i2 …を格納した Ruby の配列を作成し返します。

rb_ary_new4

rb_ary_new_from_values の古い名前です。新しく書くコードでは rb_ary_new_from_values を使ってください。

rb_ary_new_capa

要素を持たない配列を作成します。内部のバッファは capa 個の要素分を確保します。配列が最終的にある大きさまで育つと分かっているときは、サイズ変更を繰り返すよりも効率的です。

rb_ary_new_from_args

可変長引数で渡されたオブジェクトから、要素数 n の配列を作成します。

rb_ary_new_from_values

C の配列で渡されたオブジェクトから、要素数 n の配列を作成します。 rb_ary_new_from_args とは、オブジェクトの渡し方だけが異なります。

rb_ary_pop

配列 ary の末尾の要素をとりのぞき返します。空配列のときは Qnil を返します。

rb_ary_push

配列 ary の末尾に item を追加します。

rb_ary_shift

配列 ary の先頭の要素を取り除き返します。空配列のときは Qnil を返します。

rb_ary_sort

ary.sort

rb_ary_store

配列 ary のインデックス idx に val を格納します。idx が範囲を越えるときは Ruby レベルと同じく自動的にサイズが拡張されます。

rb_ary_subseq

配列 ary の一部を、新しい配列として取り出します。

rb_ary_to_ary

オブジェクトを強制的に配列にします。まず obj の to_ary メソッドを試し、結果があればそれを返します。そうでなければ、obj だけを要素とする長さ 1 の配列を作って返します。

rb_ary_to_s

ary.to_s

rb_ary_unshift

配列 ary の先頭に item を挿入します。

rb_assoc_new

[a,b] を返します。

rb_attr
rb_autoload_load
rb_backref_get

現在の SCOPE の $~ の値を返します。

rb_backref_set

現在の SCOPE の $~ に val を代入します。

rb_backtrace
rb_block_call

obj のメソッド mid を、C の関数 proc をブロックとして渡して呼び出します。 rb_funcallv にブロックとして関数を渡せるようにしたものです。

rb_block_call_kw

rb_block_call と同じですが、argv の最後の要素をキーワード引数として扱うかどうかを kw_splat で指定します。

rb_block_given_p

メソッドがブロック付きで呼ばれていれば true を返します。

rb_bug

インタプリタをただちに異常終了させます。インタプリタ自身のバグが原因の状況で呼ばれることを想定した関数で、例外処理も ensure の実行もしません。可能であれば、内部状態やスタックトレース、レジスタの値をデバッグ用に表示します。

rb_call_super

Rubyレベルでの super です。現在評価中のメソッドのスーパークラスのメソッドを呼び出します。

rb_catch

catch と同等の動作を実行します。

rb_check_arity

引数の個数 argc が min 以上 max 以下の範囲にあることを検査します。 max に UNLIMITED_ARGUMENTS を指定すると、上限は検査しません。範囲外のときは ArgumentError が発生します。 rb_scan_args が使えるときは、そちらのほうが強力で分かりやすいので、そちらを使ってください。

rb_check_convert_type

val.method を実行してクラス tname のインスタンスを返します。 val がメソッド method を持たなければ nil を返します。

rb_class2name

klass の名前を返します。返り値の内容を変更したり free してはいけません。

rb_class_instance_methods

Module#instance_methods の実体。モジュール mod に定義されている public メソッド名のリストを文字列の配列で返します。

rb_class_new

super をスーパークラスとして新しいクラスオブジェクトを生成し、返します。

rb_class_new_instance

Class#new の実体です。

rb_class_path

klass の名前を返します。klassが無名クラス、無名モジュールの場合 #<Class 0xXXXX>, #<Module 0xXXXX> の形式で返します。

rb_class_private_instance_methods

Module#private_instance_methods の実体。モジュール mod に定義されている private メソッド名のリストを文字列の配列で返します。

rb_class_protected_instance_methods

Module#protected_instance_methods の実体。モジュール mod に定義されている protected メソッド名のリストを文字列の配列で返します。

rb_class_real

特異クラスや化身クラス (T_ICLASS) を飛ばして cl のスーパークラスを辿り、Ruby レベルに露出してもよいクラスを返します。

rb_class_superclass
rb_const_defined

klass とそのスーパークラスに定数 id が定義されていれば真。

rb_const_defined_at

klass 自体に定数 id が定義されていれば真。

rb_const_get

定数 klass::name の値を取得します。

rb_const_get_at

クラス klass で定義された定数 name の値を取得します (祖先や外のクラスは調べない)。

rb_const_list
rb_const_set

定数 klass::name の値を val として定義します。

rb_convert_type

オブジェクト val をクラス type のインスタンスに変換します。変換には、val.method の戻り値が使われます。

rb_copy_generic_ivar
rb_cstr_to_dbl
rb_cv_get

klass のクラス変数 name の値を取得します。

rb_cv_set

klass のクラス変数 name に val を代入します。変数がまだ定義されていない場合は NameError を発生します。

rb_cvar_defined
rb_cvar_get

klass のクラス変数 name の値を取得します。

rb_cvar_set

klass のクラス変数 name に val を代入します。変数がまだ定義されていない場合は NameError を発生します。

rb_define_alias

クラス klass のインスタンスメソッド old の別名 new を定義します。

rb_define_attr

クラス klass にメソッド name と name= を定義します。 read が真のときは name を定義し、 write が真のときは name= を定義します。

rb_define_class

クラス super の下位クラス name を作成し返します。

rb_define_class_id

クラス名 id でクラス super を継承したクラスを新しく作成する。クラス→クラス名 (定数名) の関連付けはなされるが、定数→クラスの関連付けはなされない。

rb_define_class_under

super のサブクラスとして新しい Ruby クラスを、outer の定数として定義して返します。

rb_define_class_variable

クラス klass のクラス変数 name を初期値 val で定義します。既に同名の変数が定義されていたら警告します。

rb_define_const

クラス klass の定数 name を初期値 val で定義します。既に同名の定数が定義されていたら警告します。

rb_define_global_const

トップレベル (現在は Object) の定数 name を初期値 val で定義します。既に同名の定数が定義されていたら警告します。

rb_define_global_function

関数 name を定義します。 func と argc は rb_define_method と同じです。

rb_define_hooked_variable
rb_define_method

クラスklassのインスタンスメソッドnameを定義します。

rb_define_method_id

klass に public メソッド name を定義します。その実体は関数 func です。また argc の意味は rb_define_method と同じです。

rb_define_module

モジュール name を作成し返します。

rb_define_module_function

モジュール module にモジュール関数 name を定義します。 func と argc は rb_define_method と同じです。

rb_define_module_id

名前が id である新しいモジュールを定義し、それを返します。モジュール→名前 (定数) のリンクは確立しますが名前→モジュールのリンクはまだ確立していません。

rb_define_module_under

モジュール outer::name を作成し返します。

rb_define_private_method

クラス klass にプライベートインスタンスメソッド name を定義します。その実体は関数 func であり、その関数がとる引数のタイプを argc で指定します。argc のフォーマットについては rb_define_method の項を参照してください。

rb_define_protected_method

クラス klass に protected インスタンスメソッド name を定義します。その実体は関数 func であり、その関数がとる引数のタイプを argc で指定します。argc のフォーマットについては rb_define_method の項を参照してください。

rb_define_readonly_variable
rb_define_singleton_method

obj に特異メソッド name を定義します。メソッドの実体を func に関数ポインタで与え、その関数がとる引数のタイプを argc に渡します。argc のフォーマットについては rb_define_method の記述を参照してください。

rb_define_variable
rb_define_virtual_variable
rb_enc_str_new

エンコーディングを指定して、新しい String を作成します。 rb_str_new と同じですが、エンコーディング enc を持つ文字列になります。

rb_enc_str_new_cstr

エンコーディングを指定して、C の文字列から新しい String を作成します。 rb_enc_str_new と同じですが、ptr が C の文字列であると仮定して長さを求めます。 rb_str_new_cstr と同じですが、エンコーディング enc を持つ文字列になります。

rb_enc_str_new_literal

エンコーディングを指定して、C の文字列リテラルから新しい String を作成します。文字列リテラルの領域を、そのまま文字列の実体として使います。文字列リテラルしか渡せません。変数は渡せません。

rb_ensure

ensure の C 版です。まず body(data1) を実行し、その途中で例外や exit が起きたとしても ensure(data2) が確実に実行されます ( body() が正常終了しても実行されます)。

rb_eql

obj1.equal?(obj2) ならば Qtrue、そうでないならば Qfalse。

rb_equal

obj1 == obj2 ならば Qtrue、そうでないならば Qfalse。

rb_eval_string

str を Ruby プログラムとしてコンパイル・評価し、その値を返します。

rb_eval_string_protect

str を Ruby プログラムとしてコンパイル・評価し、その値を返します。

rb_eval_string_wrap

rb_eval_string_protect と同じですが、スクリプトの評価を無名のモジュールのもとで行います。

rb_exc_fatal

例外オブジェクト err を fatal として投げます。

rb_exc_raise

例外オブジェクト err を投げます。

rb_exit

ステータス status でインタプリタを終了させます。

rb_extend_object
rb_extract_keywords

ハッシュを、シンボルをキーとする部分とそれ以外に分けます。シンボルをキーとする部分は新しいハッシュとして返します。残りは新しいハッシュとして orighash が指す先に格納します。元のハッシュは変更しません。

rb_f_abort
rb_f_exit
rb_f_global_variables
rb_f_require

require の実体。 self == obj として fname を require します。

rb_f_trace_var
rb_f_untrace_var
rb_fatal

あらゆる例外処理をスキップして即座にインタプリタが終了します。 fmt とその後の引数は printf と同じ形式でエラーメッセージを表現します。

rb_fd_clr

ファイルディスクリプタ fd を、f から取り除きます。 FD_CLR(3) に相当します。

rb_fd_init

rb_fdset_t を初期化します。ほかの rb_fd_* を使う前に、必ず初期化してください。 fd_set のためのメモリを malloc(3) で確保することに相当します。初期化後の f はファイルディスクリプタを持ちません。

rb_fd_isset

ファイルディスクリプタ fd が f に含まれているかどうかを調べます。 FD_ISSET(3) に相当します。

rb_fd_set

ファイルディスクリプタ fd を、f に追加します。 FD_SET(3) に相当します。

rb_fd_term

rb_fdset_t を破棄し、使っていたメモリなどの資源を解放します。 fd_set のメモリを free(3) で解放することに相当します。再び使うには、rb_fd_init で初期化し直す必要があります。破棄後の f はファイルディスクリプタを持ちません。

rb_fd_zero

f からすべてのファイルディスクリプタを取り除きます。 FD_ZERO(3) に相当します。

rb_fix_new
rb_Float
rb_float_new

C の double の値 d を、Float のインスタンスに変換します。

RB_FLOAT_TYPE_P

obj が Float のインスタンスかどうかを調べます。

rb_free_generic_ivar
rb_funcall

recv に対してメソッド name を呼びだし、メソッドの返り値を返します。プライベートメソッドも呼びだせます。

rb_funcall2

recv に対してメソッド name を呼びだし、メソッドの返り値を返します。プライベートメソッドも呼びだせます。

rb_funcall3

recv に対してメソッド name を呼びだし、メソッドの返り値を返します。

rb_funcall_passing_block

rb_funcallv_public と同じですが、現在のメソッドが受け取ったブロックを、呼び出すメソッドのブロックとして渡します。 foo(x, y, &z) のようなメソッドが、受け取ったブロックをそのまま別のメソッドへ渡したいときに使います。

rb_funcall_passing_block_kw

rb_funcall_passing_block と同じですが、argv の最後の要素をキーワード引数として扱うかどうかを kw_splat で指定します。

rb_funcall_with_block

rb_funcallv_public と同じですが、ブロックを渡せます。ブロックには Proc のインスタンスを指定します。 to_proc による変換が必要なときは、この関数に渡す前に済ませてください。ただし nil とシンボルは特別に受け付けます。

rb_funcall_with_block_kw

rb_funcall_with_block と同じですが、argv の最後の要素をキーワード引数として扱うかどうかを kw_splat で指定します。

rb_funcallv

recv のメソッド mid を、引数を C の配列で渡して呼び出します。 private や protected のメソッドも呼び出せます。 rb_funcall とは、引数の渡し方だけが異なります。

rb_funcallv_kw

rb_funcallv と同じですが、argv の最後の要素をキーワード引数として扱うかどうかを kw_splat で指定します。

rb_funcallv_public

recv のメソッド mid を、引数を C の配列で渡して呼び出します。 rb_funcallv と異なり、public のメソッドだけを呼び出せます。 Ruby の Object#public_send に近い動作です。

rb_funcallv_public_kw

rb_funcallv_public と同じですが、argv の最後の要素をキーワード引数として扱うかどうかを kw_splat で指定します。

rb_gc

明示的に GC を開始します。rb_gc_disable() で禁止中のときおよびすでに GC が実行中のときは実際には行われません。

rb_gc_adjust_memory_usage

外部のライブラリが確保しているメモリの量を GC に伝えます。 GC はメモリが不足してくると動きますが、DLL が mmap(2) などで確保したメモリのように、Ruby から見えないところでメモリ使用量が増減することがあります。そのような外部のメモリ確保をこの関数で登録すると、オブジェクト全体が使っているメモリの量を正しく見積もれるようになり、GC がより頻繁に動くようになります。この関数は GC を起動することがあります。

rb_gc_disable

GC を禁止します。

rb_gc_enable

GC を許可します。

rb_gc_mark

v をマークします。

rb_gc_mark_locations
rb_gc_mark_maybe

v が Ruby のオブジェクトであればマークします。

rb_gc_register_address
rb_gc_register_mark_object

object を GC から保護します。どこからも参照されていないオブジェクトも、GC に回収されなくなります。 object は移動もされなくなります。

rb_gc_start

GC を起動します。

rb_gc_unregister_address
rb_get_kwargs

キーワード引数のハッシュ keyword_hash から、table に並べたキーワードに対応する値を取り出して values に格納します。取り出した要素は keyword_hash から削除されます。

rb_global_variable

rb_gc_register_address と同じです。

rb_gv_get

Ruby のグローバル変数の値を取得します。

rb_gv_set

Ruby のグローバル変数 name に val を代入します。 val を返します。

rb_id2name

id に対応する文字列を返します。返り値は開放できません。

rb_id_attrset
rb_include_module

Module#append_features の実体。クラスまたはモジュール klass にモジュール module をインクルードします。

rb_inspect

obj.inspect の実体。

rb_int_new
rb_Integer

obj が Ruby の整数でない場合は to_i を使って Integer に変換します。

rb_integer_pack

整数 val を、words と numwords で指定したバッファに書き出します。書き出す形式は wordsize、nails、flags で指定します。 flags に INTEGER_PACK_2COMP を指定すると 2 の補数表現で書き出します。指定しないと val の絶対値を書き出し、符号は返り値で返します。あふれたときは、バッファには下位のワードが書き出されます。

RB_INTEGER_TYPE_P

obj が Integer のインスタンスかどうかを調べます。

rb_intern

任意の char* と一対一に対応する整数 ID を返す。

rb_interrupt
rb_io_wait_readable

ファイルディスクリプタ fd が読み込み可能になるまでブロックします。待っている間、ほかのスレッドは実行されます。

rb_io_wait_writable

ファイルディスクリプタ fd が書き込み可能になるまでブロックします。 rb_io_wait_readable の書き込み版です。

rb_is_class_id

クラス変数名として有効な ID ならば真。

rb_is_const_id

定数名として有効な ID ならば真。

rb_is_instance_id

インスタンス変数名として有効な ID ならば真。

rb_is_local_id

ローカル変数名として有効な ID ならば真。

rb_iter_break

break の C 用インターフェイスです。現在評価中のブロックから抜けます。

rb_iter_break_value

現在もっとも内側のブロックから抜けます。 rb_iter_break と同じですが、イテレータの評価結果となる値 val を指定できます。この値はブロックの yield の値ではなく、ブロックを渡されたイテレータ(メソッド)の返り値になります。この関数は呼び出し元に戻りません。

rb_iv_get

オブジェクト obj のインスタンス変数 name の値を取得します。

rb_iv_set

オブジェクト obj のインスタンス変数 name に val を代入します。

rb_ivar_defined

オブジェクト obj のインスタンス変数 name が定義されていれば真。

rb_ivar_get

オブジェクト obj のインスタンス変数 name の値を取得します。

rb_ivar_set

オブジェクト obj のインスタンス変数 name に val を代入します。

rb_jump_tag

初出: [ruby-dev:4064]

rb_lastline_get

現在評価中の SCOPE の $_ の値を取得します。

rb_lastline_set

現在評価中の SCOPE の $_ に val を代入します。

rb_len2int

rb_len_t の値 n を int に変換します。 int に収まらないときは RangeError が発生します。 RSTRING_LENINT などが使います。

rb_len2long

rb_len_t の値 n を long に変換します。 long に収まらないときは rb_out_of_long によって RangeError が発生します。 rb_len_t が long の環境では常に成功します。 64 ビットの mswin で、長さを long で保持している拡張ライブラリが使います。 [feature#22400]

RB_LEN_MAX

rb_len_t が取りうる最大値です。 long の環境では LONG_MAX、64 ビットの mswin では INT64_MAX です。

RB_LEN_MIN

rb_len_t が取りうる最小値です。 long の環境では LONG_MIN、64 ビットの mswin では INT64_MIN です。

rb_len_t

String や Array、MatchData の長さや添字を表す符号付き整数型です。 long ですが、64 ビットの mswin (Visual C++ でビルドした 64 ビット Windows 版) では long が 32 ビットのままポインタが 64 ビットなので、int64_t として定義されます。 32 ビットの mswin と MinGW 版では long です。 RSTRING_LEN や rb_range_beg_len など、長さを受け渡す C API はこの型を使います。拡張ライブラリはこれらの長さを long ではなく rb_len_t で保持してください。 64 ビットの mswin では、長さを long で保持すると 2GiB で切り詰められ、rb_range_beg_len などの出力引数に long * を渡すとコンパイルエラーになります。 long が必要なときは rb_len2long で変換してください。また 64 ビットの mswin では ABI も変わるため、拡張ライブラリの再ビルドが必要です。古い版もサポートする拡張ライブラリは、HAVE_RB_LEN_T が未定義のときに typedef long rb_len_t; などで代用できます。 extconf.rb からは RbConfig::SIZEOF["rb_len_t"] で大きさを取得できます。なお 64 ビットの mswin でも Fixnum の範囲 (FIXNUM_MAX) は 31 ビットのままなので、LEN2NUM の結果は 2**30 以上で Bignum になります。 [feature#22400]

rb_load

参考: [ruby-list:21651]

rb_load_protect
rb_mark_hash
rb_mark_tbl
rb_memerror

NoMemoryErrorをraiseする。しかしraise自体にもメモリ容量を使うため、メモリが足りない状況ではその途中でまたメモリ不足になる可能性がある。そのためこの関数では再帰を検出した場合はraiseではなくexitするようになっている。

rb_memory_view_available_p

obj がメモリビューのエクスポートをサポートしていれば true を返します。サポートしていない場合は false を返します。

rb_memory_view_extract_item_members

要素メンバからなるオブジェクトを返します。

rb_memory_view_fill_contiguous_strides

shape を持った与えられた要素サイズの contiguous 配列のストライド(バイト単位)で strides を埋めます。

rb_memory_view_get

obj が flags に適合するメモリビューのエクスポートをサポートする場合、 view をメモリビューの情報で埋めて true を返します。その場合、 view->obj の参照カウントが増えます。

rb_memory_view_get_item

indices が示す要素の Ruby オブジェクトとしての表現を返します。必要であれば view->item_desc を初期化します。この関数は rb_memory_view_get_item_pointer を使います。

rb_memory_view_get_item_pointer

indices が示す要素の位置を計算します。 indices の長さは view->ndim と等しくなければなりません。

rb_memory_view_init_as_byte_array

1 次元のバイト列として view のメンバを埋めます。

rb_memory_view_is_column_major_contiguous

メモリビュー view が列指向 contiguous 配列であれば true を返します。

rb_memory_view_is_contiguous

メモリビュー view のデータが行指向か列指向 contiguous 配列であれば true を返します。

rb_memory_view_is_row_major_contiguous

メモリビュー view が行指向 contiguous 配列であれば true を返します。

rb_memory_view_item_size_from_format

要素が使用するバイト数を計算します。

rb_memory_view_parse_item_format

format を分解して members を埋め、 members の数を n_members に設定します。

rb_memory_view_prepare_item_desc

view の item_desc メンバを埋めます。

rb_memory_view_register

entry をメモリビューのエントリとして klass に登録します。

rb_memory_view_release

メモリビュー view を解放して view->obj の参照カウントを減らします。

rb_method_boundp
rb_mod_ancestors

モジュール mod にインクルードされているモジュール、さらに mod がクラスならばスーパークラスとそれにインクルードされているモジュールを再帰的に集めてメソッド探索優先順位順に並べて返します (早く探索されるほうが前)。

rb_mod_class_variables
rb_mod_const_at
rb_mod_const_of
rb_mod_constants
rb_mod_include_p

モジュール mod が mod2 をインクルードしていれば真。

rb_mod_included_modules

モジュール mod にインクルードされているモジュールの配列を返します。

rb_mod_module_eval

Module#module_eval の実体です。

rb_mod_name

Module#name の実体です。無名クラス、無名モジュールに対しては空文字列を返します。

rb_mod_remove_const
rb_mod_remove_cvar
rb_module_new

新しいモジュールオブジェクトを作成し、返します。

rb_nogvl

func を GVL を解放して呼び出します。 rb_thread_call_without_gvl と同じですが、動作を変える flags を追加で受け取ります。 func を呼ぶ前に保留中の割り込みを処理し、func から戻って GVL を再取得したあとで、その間に発生した割り込みを処理します。他のスレッドから Thread#kill などで割り込まれたときは ubf が呼ばれます。 func の中では、メソッド呼び出しや例外の発生など、ほとんどの Ruby の C API は使えません。

RB_NOGVL_INTR_FAIL

rb_nogvl の flags に指定するフラグです。 func から戻ったあとで割り込みを処理しなくなります。代わりに、ブロッキング領域に入る前に割り込みを検出したときは、func を呼ばずに戻ります。 func の副作用を考慮したうえで、あとから呼び出し側で割り込みを確認できます。

RB_NOGVL_OFFLOAD_SAFE

rb_nogvl の flags に指定するフラグです。 func をバックグラウンドのスレッドやワーカープールにオフロードしても安全であることを示します。つまり func を Fiber スケジューラの blocking_operation_wait フックで実行できます。 func がスレッドローカルストレージやスレッド固有のデータ操作 (たとえば Mutex の unlock) に依存するときは、別のスレッドでは動作が異なったり失敗したりするため、指定しないでください。

RB_NOGVL_PENDING_INTR_FAIL

rb_nogvl の flags に指定するフラグです。現在のスレッドに保留中の割り込みがあるとき、Thread.handle_interrupt でマスクされた割り込みも含めて、ブロッキング領域に入らず、func も呼ばずに 0 を返します。 errno は RB_NOGVL_INTR_FAIL による既存のスキップ時と同じく、func が呼ばれていないため 0 です。

RB_NOGVL_UBF_ASYNC_SAFE

rb_nogvl の flags に指定するフラグです。渡した ubf がシグナルハンドラから呼べる (async-signal-safe な) 関数であることを示します。 async-signal-safe でない ubf でも問題ないため、よく分からなければ指定しなくて構いません。

rb_num2dbl

任意の Numeric のオブジェクトを double に変換します。

rb_obj_alloc

klass のインスタンスを作成する。

rb_obj_call_init

オブジェクト obj に対して initialize を呼び出します。引数は長さ argc の配列 argv で表され、ブロックが積んである場合はそれも自動的に渡されます。

rb_obj_class

Object#class の実体です。

rb_obj_clone

Object#clone の実体です。

rb_obj_dup

Object#dup の実体です。

rb_obj_freeze

Object#freeze

rb_obj_frozen_p

Object#frozen?

rb_obj_hide

オブジェクトを Ruby のコードから見えなくします。 RBasic::klass フィールドを消去し、オブジェクトを内部オブジェクトにします。 ObjectSpace?.each_object ではこのオブジェクトを列挙できなくなります。同時に、そのオブジェクトに対してメソッドを呼び出す手段も失われます。

rb_obj_id

Object#object_id の実体です。

rb_obj_instance_eval
rb_obj_instance_variables
rb_obj_is_instance_of

obj がクラス klass のインスタンスならば真。

rb_obj_is_kind_of

obj がクラス klass およびそのサブクラスのインスタンスのとき真。

rb_obj_is_proc

recv が Proc のインスタンスであれば真を返します。

rb_obj_method
rb_obj_remove_instance_variable
rb_obj_respond_to

obj がメソッド mid に応答するなら 1、そうでなければ 0 を返します。 private_p が真のときはプライベートメソッドも対象にします。

rb_obj_reveal

rb_obj_hide で隠したオブジェクトを、再び見えるようにします。 RBasic::klass を klass に戻します。 obj が本来属していたクラスを、呼び出し側が正しく渡してください。この関数をクラス情報の変更に使ってはいけません。

rb_obj_singleton_methods

Object#singleton_methods の実体。オブジェクト obj に定義されている特異メソッド名のリストを文字列の配列で返す。

rb_out_of_long

num が long の範囲に収まらないことを示す RangeError を発生させます。

rb_p

p の実体。obj を見やすく出力します。

rb_path2class
rb_proc_new
rb_protect

初出: [ruby-dev:4064]

rb_provide

ライブラリ feature をロードしたものとしてロックをかけます。

rb_provided
rb_raise

クラス err の例外を発生します。fmt とその後の引数は、 printf と同じ形式でエラーメッセージを表します。

rb_remove_event_hook

rb_add_event_hook で登録したフック関数 func を、イベントフックの一覧から削除します。 1 つの func を複数のイベントで共有できるため、削除された個数が 1 より大きくなることがあります。

rb_remove_method

クラス klass 自体に登録されている name という名前のメソッドを検索し、エントリを削除します。見付からなかったときは例外 NameError を発生します。

rb_require

require の C 版です。feature「fname」をロードします。

rb_rescue

まず b_proc(data1) を実行し、その途中で例外が発生したら r_proc(data2) を実行します。捕捉する例外は StandardError のサブクラスだけです。

rb_rescue2

まず b_proc(data1) を実行し、その途中で例外が発生したら r_proc(data2) を実行します。第五引数以降の可変長引数に捕捉したい例外クラスのリストを指定します。引数の最後は NULL で終らなければなりません。

rb_respond_to

obj にメソッド id が定義されているとき真。プライベートメソッドに対しても真を返します。

rb_scan_args

長さ argc の配列 argv を fmt に従って解析し、第四引数以降で渡されたアドレスに書き込みます。

rb_scan_args_kw

rb_scan_args と同じように、argc と argv の引数を fmt の書式に従って、続く VALUE への参照に格納します。キーワード引数が渡されているかどうかを、Ruby からの呼び出しで決めるのではなく、kw_splat で指定する点が異なります。 fmt の書式は rb_scan_args と同じです。

rb_set_class_path
rb_set_end_proc
rb_singleton_class

obj に特異クラスを導入し、その特異クラスを返します。すでに特異クラスが導入されているときはそれをそのまま返します。

rb_singleton_class_attached

特異クラス klass にその唯一のインスタンス obj を結びつけます。

rb_singleton_class_clone

特異クラス klass を clone して返します。 klass が特異クラスでないときはただ klass を返します。

rb_sprintf

fmt に従って整形した文字列を、新しい String として作成します。 Ruby 独自の sprintf(3) で、ロケールに依存しません。

rb_str_append

文字列 dst の末尾に、文字列 src を破壊的に追加します。 src の内容は、dst のエンコーディングに変換されて追加されます。 dst は String でなければいけません。

rb_str_cat

文字列 str に、長さ len (NUL 含まず)の C の文字列 ptr を破壊的に連結します。

rb_str_cat2

文字列 str に C の文字列 ptr を破壊的に連結します。ptr はヌル終端を仮定しています。

rb_str_cat_cstr

文字列 dst の末尾に、C の文字列 src を破壊的に追加します。 rb_str_cat(dst, src, strlen(src)) と同じです。 dst は String でなければいけません。 src は NULL であってはいけません。

rb_str_catf

rb_sprintf と同じ書式で整形した結果を、文字列 dst の末尾に追加します。新しい文字列を作る代わりに、指定した文字列に出力します。 rb_str_append(dst, rb_sprintf(fmt, ...)) と同じ結果になります。

rb_str_concat

equivalent to "s1.concat s2"

rb_str_dup

文字列 str の複製を作成し返します。

rb_str_modify

文字列 str を変更する準備をします。 RSTRING_PTR や rb_str_set_len を使って str の内容を変更する前には、必ずこの関数を呼んでください。

rb_str_new

ptr から len バイト分をコピーして Ruby の文字列を作成し返します。

rb_str_new2

rb_str_new(ptr, strlen(ptr))

rb_str_new4

文字列 orig の変更不可能な複製を作成し返します。

rb_str_new_cstr

C の文字列 ptr から、新しい String を作成します。 rb_str_new(ptr, strlen(ptr)) と同じです。エンコーディングは ASCII-8BIT(binary)になります。

rb_str_new_literal

C の文字列リテラルから、新しい String を作成します。文字列リテラルの領域を、そのまま文字列の実体として使います。文字列リテラルしか渡せません。変数は渡せません。エンコーディングは ASCII-8BIT(binary)になります。

rb_str_resize

文字列 str の長さを len バイトにします。 rb_str_set_len と異なり、文字列を伸ばすこともできます。 len が元の長さより小さければ、len バイトより後ろの内容は捨てられます。大きければ、元の長さより後ろの内容は保証されず、ごみになります。

rb_str_set_len

文字列 str の長さを len バイトに設定します。主に、あらかじめ rb_str_modify_expand で領域を広げた文字列を縮めるために使います。 len は str の容量を超えてはいけません。 len バイトまでの内容は、現在の長さによらず保たれます。 str は String でなければいけません。

rb_str_substr

str[beg, len]

rb_str_to_dbl
rb_str_vcatf

rb_str_catf と同じですが、値を va_list で渡します。 rb_vsprintf の結果を、新しい文字列を作る代わりに、指定した文字列の末尾に追加します。 rb_str_append(dst, rb_vsprintf(fmt, ap)) と同じ結果になります。

rb_String

Kernel?.String の実体です。 val を文字列に変換します。

rb_sym_all_symbols

呼び出し時までに変換が行われたすべてのシンボルの配列を返す。

rb_thread_alone

評価器にスレッドが一つしか存在しないとき真。

rb_thread_atfork
rb_thread_create
rb_thread_current

現在実行中のスレッドを返します。

rb_thread_fd_close
rb_thread_fd_select

複数のファイルディスクリプタを同時に待ちます。 select(2) を呼ぶ関数ですが、GVL を解放して待つので、ほかの Ruby のスレッドが並行して動けます。

rb_thread_fd_writable
rb_thread_kill
rb_thread_local_aref
rb_thread_local_aset
rb_thread_main

メインスレッド (プロセスの一番最初に存在するスレッド) を返します。

rb_thread_run

スレッド thread に実行権を渡します。

rb_thread_schedule

他のスレッドに実行権を渡します。対象の特定はできません。

rb_thread_sleep
rb_thread_sleep_forever
rb_thread_stop

現在実行中のスレッドを停止します。他のスレッドから rb_thread_wakeup を呼ばれると再開します。

rb_thread_wait_fd

ファイルディスクリプタ fd を読み込めるようになるまでカレントスレッドを停止します。

rb_thread_wait_for

time の長さの時間が経過するまでカレントスレッドを停止します。

rb_thread_wakeup

停止中のスレッド thread を再開させます。

rb_throw

throw の実体。返り値を val として、 tag を catch したところまでジャンプします。

rb_time_timespec_new

引数 ts、offset を元に Time オブジェクトを作成して返します。

rb_timespec_now

現在時刻を取得してその結果を引数 ts で指定した timespec 構造体に格納します。

rb_to_id

String・Fixnum・Symbol を ID に変換します。

rb_to_int

val を to_int メソッドを使って Ruby の整数に変換します。

RB_TYPE_P

obj の内部の型が t(T_NIL、T_FIXNUM など)かどうかを調べます。型が合わないときに例外を発生させたいときは Check_Type を使います。

rb_uint_new
RB_ULEN_MAX

rb_ulen_t が取りうる最大値です。 unsigned long の環境では ULONG_MAX、64 ビットの mswin では UINT64_MAX です。

rb_ulen_t

rb_len_t と同じ幅の符号なし整数型です。 unsigned long ですが、64 ビットの mswin では uint64_t です。

rb_undef

クラス klass のメソッド id を undef します。

rb_undef_method

クラス klass のインスタンスメソッド name を undef します。

rb_usascii_str_new

US-ASCII の新しい String を作成します。 rb_str_new と同じですが、エンコーディングが US-ASCII になります。 rb_external_str_new とは異なり、内容の変換はしません。

rb_usascii_str_new_cstr

C の文字列 ptr から、US-ASCII の新しい String を作成します。 rb_str_new_cstr と同じですが、エンコーディングが US-ASCII になります。

rb_usascii_str_new_literal

C の文字列リテラルから、US-ASCII の新しい String を作成します。文字列リテラルの領域を、そのまま文字列の実体として使います。文字列リテラルしか渡せません。変数は渡せません。

rb_utf8_str_new

UTF-8 の新しい String を作成します。 rb_str_new と同じですが、エンコーディングが UTF-8 になります。

rb_utf8_str_new_cstr

C の文字列 ptr から、UTF-8 の新しい String を作成します。 rb_str_new_cstr と同じですが、エンコーディングが UTF-8 になります。

rb_utf8_str_new_literal

C の文字列リテラルから、UTF-8 の新しい String を作成します。文字列リテラルの領域を、そのまま文字列の実体として使います。文字列リテラルしか渡せません。変数は渡せません。

rb_vsprintf

rb_sprintf と同じですが、値を va_list で渡します。 fmt に従って整形した文字列を、新しい String として作成します。

rb_wait_for_single_fd

1 つのファイルディスクリプタ fd が、指定したイベントのどれかで準備できるまでブロックします。タイムアウトも指定できます。複数のファイルディスクリプタを待つときは rb_thread_fd_select を使います。

rb_warn

fmt に従って整形した警告メッセージを出力します。 $VERBOSE が nil のときは何もしません。 $VERBOSE が false でも出力される点が rb_warning と異なります。

rb_warning

fmt に従って整形した警告メッセージを出力します。 $VERBOSE が真のときだけ出力し、それ以外では何もしません。

rb_yield

yield の C 版です。val を引数にブロックを実行します。複数の引数を与えたいときは配列に格納して渡します。

rb_yield_splat

配列 ary の要素を、それぞれ別の引数としてブロックに yield します。 rb_yield_values2 と同じですが、引数を Ruby の配列で指定します。

rb_yield_splat_kw

rb_yield_splat と同じですが、ary の最後の要素をキーワード引数として扱うかどうかを kw_splat で指定します。

rb_yield_values

n 個の引数をブロックに yield します。 rb_yield と同じですが、引数を可変長で渡します。 Ruby の引数 1 つにつき、C の引数 1 つを使います。

rb_yield_values2

n 個の引数をブロックに yield します。 rb_yield_values と同じですが、引数を C の配列 argv で渡します。

rb_yield_values_kw

rb_yield_values2 と同じですが、argv の最後の要素をキーワード引数として扱うかどうかを kw_splat で指定します。

RBASIC
RCLASS
RDATA
REALLOC_N

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

RFILE
RHASH_TBL

h の内容を持つ st_table を返します。 h の実装が st_table であるとは限らないため、必要なときに作成されます。

RMODULE
ROBJECT
RREGEXP
RSTRING

引数 obj を RString 構造体にキャストして返します。

RSTRING_END

引数 str の表す文字列のポインタの末尾を返します。

RSTRING_LEN

引数 str の表す文字列のバイト数を返します。

RSTRING_LENINT

引数 str の表す文字列のバイト数をint型にキャストして返します。

RSTRING_PTR

引数 str の表す文字列のポインタの先頭を返します。

RTEST

obj が Qfalse でも Qnil でもないとき真。

RUBY_DATA_FUNC

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

ruby_finalize

評価器プロセスの終了処理を行います。

ruby_init

評価器を初期化します。Ruby C API を呼ぶプロセスでは前もって必ずこの関数を呼ばなければなりません。

RUBY_METHOD_FUNC

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

ruby_options

argc と argv を ruby へのコマンドラインオプションとして処理します。

RUBY_REF_EDGE

構造体 type のメンバ member を、VALUE への参照(edge)として宣言します。 RUBY_REFERENCES のブロックの中で使います。値は構造体の先頭から member までのオフセットです。

RUBY_REFERENCES

ref_list_name を、構造体が持つ VALUE への参照の一覧として定義します。構造体のメンバへのオフセットを並べた静的な配列になります。一覧は RUBY_REF_END で終わらせます。

ruby_run_node

コンパイル済みのソースを実行し、このプロセスを終了します。 n には rb_load_file などで得た、中身の見えない「ノード」のポインタを渡します。

ruby_script

現在のスクリプト名を name に設定します。 Ruby レベルで $0 = name とするのと似ていますが、インタプリタが保持するスクリプト名も変わります。

ruby_stack_check
ruby_stack_length
ruby_stop

評価器プロセスを停止します。

RUBY_TYPED_EMBEDDABLE

rb_data_type_t の flags に指定するフラグです。 Ruby 3.3 で追加され、4.1 で公開 API として文書化されました。 [feature#21853] Ruby は C の構造体を malloc で別に確保せず、オブジェクトのスロットに直接埋め込むことがあります。ポインタをたどる回数や malloc の負荷が減り、場合によってはメモリ使用量も減ります。ただし保証ではなく、構造体がスロットに収まらないときなどは埋め込まれません。

ruby_xcalloc

引数と返り値は calloc() と同じです。ただしメモリ割り当てに失敗したときは GC を行いそれでもだめなときは例外 NoMemoryError を発生します。つまりこの関数が返り値を返したときは常に割り当ては成功です。

ruby_xfree

以前 malloc/calloc/realloc して free していないポインタ x を開放します。ruby のシグナル機構とコンフリクトしません。

ruby_xfree_sized

ruby_xfree と同じですが、確保したときの大きさ size を受け取ります。 C23 の free_sized に倣った関数で、GC がメモリ使用量をより正確に追跡できます。 size は ptr を確保したときの大きさと正確に一致していなければならず、誤った大きさを渡すと未定義動作になり、クラッシュやメモリリークを起こすことがあります。 [feature#21861]

ruby_xmalloc

引数と返り値は malloc() と同じ。ただしメモリ割り当てに失敗したときは GC を行いそれでもだめなときは NoMemoryError を raise する。つまりこの関数が返り値を返したときは常に割り当ては成功している。

ruby_xrealloc

引数と返り値の意味は realloc() と同じ。ただしメモリ割り当てに失敗したときは GC を行いそれでもだめなときは NoMemoryError を raise する。つまりこの関数が返り値を返したときは常に割り当ては成功している。

ruby_xrealloc2_sized

ruby_xrealloc2 と同じですが、現在の要素数 oldelems を受け取ります。 oldelems は ptr を確保したときの要素数と正確に一致していなければならず、誤った大きさを渡すと未定義動作になります。 [feature#21861]

ruby_xrealloc_sized

ruby_xrealloc と同じですが、現在の大きさ oldsiz を受け取ります。 oldsiz は ptr を確保したときの大きさと正確に一致していなければならず、誤った大きさを渡すと未定義動作になります。 [feature#21861]

SafeStringValue

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

SIZEOF_RB_LEN_T

rb_len_t の大きさをバイト単位で表すマクロです。 long の環境では SIZEOF_LONG と同じで、64 ビットの mswin では 8 です。 typedef はプリプロセッサから見えないため、#if SIZEOF_RB_LEN_T > SIZEOF_LONG のように、rb_len_t が long より広いかどうかの判定に使えます。

SPECIAL_CONST_P

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

st_add_direct

st_insert() と似ているが、同じハッシュ値を持つエントリーに対する「同値検査」を省略する。key がまだ登録されていないことがはっきりしている場合には、少し高速に登録できる。

st_cleanup_safe

never と同じ値を持つエントリーを削除する。

st_copy

Hash#dup の実体。 old_table と同じ内容の st_table を新たに作成して返す。

st_delete

*key に対応する値をテーブルから削除し、*key、*value に登録時のキーと値を書きこむ。返り値は削除したかどうか。

st_delete_safe

st_delete と似ているが、その場ですぐに削除するのではなく never を書きこんでおく。st_cleanup_safe() で本当に削除できる。 Ruby では never には Qundef を使う。

st_foreach

Hash#each, delete_if などの実体。ハッシュ内の全てのキーと値、arg を引数にして、func を実行する。func の返り値 enum st_retval は ST_CONTINUE ST_STOP ST_DELETE のどれか。どれも見ためどおりの働きをする。

st_free_table

table を解放する。キー、値は解放されない。

st_init_numtable

キーが int 型であるハッシュテーブルを作成する。

st_init_numtable_with_size

キーが int 型であるハッシュテーブルを作成する。 st_init_table() に int 用の操作関数を渡しているだけ。

st_init_strtable

キーが char* 型であるハッシュテーブルを作成する。

st_init_strtable_with_size

キーが char* 型であるハッシュテーブルを作成する。 st_init_table に文字列用の操作関数を渡しているだけ。

st_init_table
st_init_table_with_size

st_table を作成する。_with_size はサイズを指定して生成する。 struct st_hash_type はハッシュ値を得る関数と、同値判定を行う関数を持つ。

st_insert

ハッシュに key と value の組を追加する。古いライブラリなので void* のかわりに char* を使っている。

st_lookup

key に対応する値をみつけて value にポインタを書きこむ。返り値は見つかったかどうかの真偽値。

StringValue

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

StringValueCStr

v を String に変換し、その実体の C の文字列へのポインタを返します。 StringValuePtr と同じですが、内容が C の文字列として使えるかも検査します。 Ruby は C より広い範囲の内容を文字列として受け付けるため、この検査が必要になります。返り値は NUL で終端されています。

StringValuePtr

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

SYM2ID

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

SYMBOL_P

obj が Symbol のインスタンスのとき真。

TYPE

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

UINT2NUM

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

ULEN2NUM

rb_ulen_t の値 n を Fixnum か Bignum に変換します。 rb_ulen_t が unsigned long の環境では ULONG2NUM、64 ビットの mswin では ULL2NUM と同じです。

ULL2NUM
ULONG2NUM