ruby のネイティブ拡張を FFIに移植しようとしています。公開された Ruby インターフェイスは
auto_link(text, mode=:all, link_attr=nil, skip_tags=nil, flags=0) { |link_text| ... }
ブロックはオプションです。
元の c 実装には 2 つの関数があります。
int rinku_autolink(
struct buf *ob,
const uint8_t *text,
size_t size,
autolink_mode mode,
unsigned int flags,
const char *link_attr,
const char **skip_tags,
void (*link_text_cb)(struct buf *ob, const struct buf *link, void *payload),
void *payload)
実際の作業を行い、
static VALUE rb_rinku_autolink(int argc, VALUE *argv, VALUE self)
これは、デフォルトの引数とブロック コールバックを処理します。
私の質問は、FFI で同じ ruby インターフェイスを公開したい場合、上記の関数のどれを登録する必要があるattach_function
か、または FFI 用に別の c 関数を定義する必要があるかどうかです。そして、どの関数を選択してデフォルトの引数値を定義するattach_function
か?