Skip to content

Internal API

Tomoyuki Sahara edited this page Apr 21, 2014 · 8 revisions
  • mrb_check_convert_type : mrb_value mrb_check_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
    • mrb_convert_type とほぼ同じだが例外を上げる代わりに nil を返す。
  • mrb_class_get : struct RClass *mrb_class_get(mrb_state *mrb, const char *name)
    • name という名前のクラスの struct RClass * を得る。
  • mrb_convert_type : mrb_value mrb_convert_type(mrb_state *mrb, mrb_value val, enum mrb_vtype type, const char *tname, const char *method);
    • 値 val を type で表される型に変換する。変換できない場合は TypeError 例外を上げる。 tname は変換先の型(type)のC文字列表現で例外メッセージの作成に使われる。 method は変換に使うメソッド名を指定する(つまり適切なメソッドを選んでよろしく変換してくれるわけではない)。
  • mrb_intern_cstr : mrb_sym mrb_intern_cstr(mrb_state *mrb, const char *str)
    • 文字列 str に対応するシンボルを得る。
  • mrb_method_search : struct RProc *mrb_method_search(mrb_state *mrb, struct RClass *c, mrb_sym mid)
    • シンボル mid で表される、クラス c のメソッドを得る。見つからなければ NameError 例外を上げる。
  • mrb_method_search_vm : struct RProc *mrb_method_search(mrb_state *mrb, struct RClass **cp, mrb_sym mid)
    • シンボル mid で表される、クラス *cp のメソッドを得る。見つかった場合、そのメソッドを実装しているクラスを *cp に入れて返す。 メソッドが元の *cp の親クラスなどの別のクラスで定義されている場合に *cp の値が書き変わる。

String

文字列の結合

  • mrb_str_buf_append : mrb_value mrb_str_buf_append(mrb_state *mrb, mrb_value str, mrb_value str2);
    • mrb_str_buf_new で作成した文字列 str の末尾に文字列 str2 を追加する。
  • mrb_str_buf_cat : mrb_value mrb_str_buf_cat(mrb_state *mrb, mrb_value str, const char *ptr, size_t len);
    • mrb_str_buf_new で作成した文字列 str の末尾にポインタ ptr から len バイト分のC文字列を追加する。
  • mrb_str_concat : void mrb_str_concat(mrb_state *mrb, mrb_value self, mrb_value other);
    • self の後に other を追加する。mrb_value 二つを結合する場合はこれ。

その他

  • mrb_str_buf_new : mrb_value mrb_str_buf_new(mrb_state *mrb, mrb_int capa);
    • capa+1 以上のサイズの内部バッファ(RSTRING_PTR)を持つ String を生成する。初期値は空文字列である。 現在(2013/10/3)の実装では、返ってきた String の RSTRING_PTR を参照して直接書き換え、その後 mrb_str_resize で 長さを設定すればデータ構造に矛盾を来すことなく操作できる。しかし安全のためには mrb_str_buf_cat や mrb_str_buf_append 等の API を利用するべきだろう。
  • mrb_str_new : mrb_value mrb_str_new(mrb_state *mrb, const char *p, size_t len);
    • ポインタ p と長さ len で表される C 言語文字列から Ruby の String を作る。現在の実装では作成された String は shared されていないが、将来にわたってその特性が維持されると考えるのは危険かもしれない。
  • mrb_str_new_cstr : mrb_value mrb_str_new_cstr(mrb_state *mrb, const char *p);
    • C言語文字列から Ruby 文字列を作る。内部的に strlen() を呼ぶため、長さがわかっている場合は mrb_str_new の方が効率が良い。 NULL を渡すと空の String が作られる。
  • mrb_str_new_static : mrb_value mrb_str_new_static(mrb_state *mrb, const char *p, size_t len);
    • mrb_str_new とほぼ同じだが、mrb_str_new と異なり p で示されるC言語文字列のコピーをつくらず、直接参照する。 特殊な String となるため基本的に使わない方が無難。Symbol の実装で利用されている。

Clone this wiki locally