Я использую Swig, чтобы обернуть библиотеку c для использования с Ruby. Есть несколько функций, которые возвращают массив из uint32_t и uint64_t в качестве указателей.
Например, что-то вроде:
const uint64_t *foo();
const uint32_t *bar();
Я чувствую, что смогу отобразить их в ruby массивы Integer с %typemap
, но не может найти хороший пример.
Отображение по умолчанию возвращает указатель swig, ie #<SWIG::TYPE_p_unsigned_long_long:0x0000000002204200>
, включая stdint.i через %include "stdint.i"
, кажется, позволяет обрабатывать uint64_t, но не указатели на них.
Обновление
Я попробовал следующую карту типов. И, похоже, работает, есть ли лучший способ?
%typemap(out) const uint64_t* {
VALUE arr;
arr = rb_ary_new();
VALUE v1 = INT2NUM(*$1);
VALUE v2 = INT2NUM(*($1+1));
rb_ary_push(arr, v1 );
rb_ary_push(arr, v2 );
$result = arr;
}