/
niceSOFT
/
swig
Обзор
Документация
Войти
/
niceSOFT
/
swig
Код
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
Examples/ruby/hashargs/example.i
36 строк
1 KB
Olly Betts
[Ruby] Pass Qnil instead of NULL to rb_funcall()
03 апр 2018, 09:01
03 апр 2018, 09:01
3bea8f6
Код
Авторство
О чём код?
%module example %typemap(in) (int nattributes, const char **names, const int *values) (VALUE keys_ary, int i, VALUE key, VALUE val) { Check_Type($input, T_HASH); $1 = NUM2INT(rb_funcall($input, rb_intern("size"), 0, Qnil)); $2 = NULL; $3 = NULL; if ($1 > 0) { $2 = (char **) malloc($1*sizeof(char *)); $3 = (int *) malloc($1*sizeof(int)); keys_ary = rb_funcall($input, rb_intern("keys"), 0, Qnil); for (i = 0; i < $1; i++) { key = rb_ary_entry(keys_ary, i); val = rb_hash_aref($input, key); Check_Type(key, T_STRING); Check_Type(val, T_FIXNUM); $2[i] = StringValuePtr(key); $3[i] = NUM2INT(val); } } } %typemap(freearg) (int nattributes, const char **names, const int *values) { free((void *) $2); free((void *) $3); } %inline %{ void setVitalStats(const char *person, int nattributes, const char **names, const int *values) { int i; printf("Name: %s\n", person); for (i = 0; i < nattributes; i++) { printf(" %s => %d\n", names[i], values[i]); } } %}