В настоящее время я пишу свой первый XS-модуль (просто оболочка вокруг математической библиотеки C) с хорошим успехом. Самой большой проблемой является документация, которую довольно сложно понять и/или которая является неполной.
Я успешно написал конструктор в 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
ST(0)
, не проверяя количество полученных аргументов. - person ikegami   schedule 23.10.2014