私は現在、最初の XS モジュール (C math-library の単なるラッパー) を作成しており、まあまあの成功を収めています。最大の問題は、ドキュメントが非常に理解しにくい、または不完全であることです。
XS でコンストラクターを作成し、ライブラリーからいくつかの関数をメソッド呼び出しとして実装することに成功しました。それはうまくいきます。
今度は、手続き型インターフェイスも実装したいと考えています。このため、メソッド呼び出しかどうかを知る必要があります。メソッド呼び出しの場合は、関数で計算する数値がインスタンスに格納されます。関数の手続き呼び出しの場合は、最初の引数として指定された数値です。これは、コサイン関数の現在のコードです。
double
cos(...)
CODE:
SV *arg = newSVsv(ST(0));
if (sv_isobject(arg)) {
HV *self_hv = MUTABLE_HV(SvRV(arg));
SV **callback_ptr = hv_fetchs(self_hv, "Number", 0);
SV *zahl = *callback_ptr;
}
else {
SV *zahl = newSVnv(arg);
}
double x = SvNV(zahl);
RETVAL = cos(x);
OUTPUT:
RETVAL