typedef SWIG , Counter - unboxed, . Counter , .
SWIG, Counter long long long.
typemap - SWIG. , SWIG typedef, Counter .
. :
%module hacking
%{
#ifdef USE_LONGLONG_COUNTS
typedef unsigned long long Count;
#else
typedef unsigned long Count;
#endif
Count foo(Count count) { return count; }
%}
%typemap(in) Count n {
#ifdef USE_LONGLONG_COUNTS
$1 = ULL2INT($input);
#else
$1 = ULONG2INT($input);
#endif
}
%typemap(out) Count {
#ifdef USE_LONGLONG_COUNTS
$result = ULL2NUM($1);
#else
$result = ULONG2NUM($1);
#endif
}
#ifdef USE_LONGLONG_COUNTS
typedef unsigned long long Count;
#else
typedef unsigned long Count;
#endif
Count foo(Count count);
, USE_LONGLONG_COUNTS , Ruby long long. .
, . , . Ruby SWIG docs, , .
:
require 'mkmf'
create_makefile('hacking')
( -DUSE_LONGLONGCOUNTS, unsigned long):
$ swig -c++ -DUSE_LONGLONG_COUNTS -ruby -o wrap.cpp hacking.i
$ ruby extconf.rb
$ make
compiling wrap.cpp
linking shared-object hacking.bundle
$ make install
/usr/bin/install -c -m 0755 hacking.bundle ...
$ irb
2.2.1 :001 > require 'hacking'
=> true
2.2.1 :002 > Hacking.foo(1234567890123454567)
=> 1234567890123454567