SWIG :
typemaps. Perl, Java, . , , typemaps :
:
typedef void * MyType;
int getblock( int a, int b, MyType *block );
2 :
%typemap(perl5, in, numinputs=0) void ** data( void * scrap )
{
$1 = &scrap;
}
%typemap(perl5, argout) void ** data
{
SV* tempsv = sv_newmortal();
if ( argvi >= items ) EXTEND(sp,1);
SWIG_MakePtr( tempsv, (void *)*$1, $descriptor(void *), 0);
$result = tempsv;
argvi++;
}
:
int getblock( int a, int b, void ** data );
swig.i. argout, , , , SWIG_MakePtr , , . , , , :
%typemap(perl5, in) void * data
{
if ( !(SvROK($input)) croak( "Not a reference...\n" );
if ( SWIG_ConvertPtr($input, (void **) &$1, $1_descriptor, 0 ) == -1 )
croak( "Couldn't convert $1 to $1_descriptor\n");
}
:
int useblock( void * data );
swig.i.
, perl, Java, . , ...