mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-09-01 23:19:18 +00:00
1
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
%insert(mli) %{
|
||||
type _value = c_obj
|
||||
%}
|
||||
|
||||
%insert(ml) %{
|
||||
type _value = c_obj
|
||||
%}
|
||||
|
||||
%define %array_tmap_out(type,what,out_f)
|
||||
%typemap(type) what [ANY] {
|
||||
int i;
|
||||
/* $*1_type */
|
||||
$result = caml_array_new($1_dim0);
|
||||
for( i = 0; i < $1_dim0; i++ ) {
|
||||
caml_array_set($result,i,out_f($1[i]));
|
||||
}
|
||||
}
|
||||
%enddef
|
||||
|
||||
%define %array_tmap_in(type,what,in_f)
|
||||
%typemap(type) what [ANY] {
|
||||
int i;
|
||||
/* $*1_type */
|
||||
$1 = ($*1_type *)malloc( $1_size );
|
||||
for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
|
||||
$1[i] = in_f(caml_array_nth($input,i));
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(free) what [ANY] {
|
||||
free( (void *)$1 );
|
||||
}
|
||||
%enddef
|
||||
|
||||
%define %make_simple_array_typemap(type,out_f,in_f)
|
||||
%array_tmap_out(out,type,out_f);
|
||||
%array_tmap_out(varout,type,out_f);
|
||||
%array_tmap_out(directorin,type,out_f);
|
||||
|
||||
%array_tmap_in(in,type,in_f);
|
||||
%array_tmap_in(varin,type,in_f);
|
||||
%array_tmap_in(directorout,type,in_f);
|
||||
%enddef
|
||||
|
||||
%make_simple_array_typemap(bool,caml_val_bool,caml_long_val);
|
||||
%make_simple_array_typemap(short,caml_val_short,caml_long_val);
|
||||
%make_simple_array_typemap(unsigned short,caml_val_ushort,caml_long_val);
|
||||
%make_simple_array_typemap(int,caml_val_int,caml_long_val);
|
||||
%make_simple_array_typemap(unsigned int,caml_val_uint,caml_long_val);
|
||||
%make_simple_array_typemap(long,caml_val_long,caml_long_val);
|
||||
%make_simple_array_typemap(unsigned long,caml_val_ulong,caml_long_val);
|
||||
%make_simple_array_typemap(size_t,caml_val_int,caml_long_val);
|
||||
%make_simple_array_typemap(float,caml_val_float,caml_double_val);
|
||||
%make_simple_array_typemap(double,caml_val_double,caml_double_val);
|
||||
|
||||
#ifdef __cplusplus
|
||||
%typemap(in) SWIGTYPE [] {
|
||||
int i;
|
||||
|
||||
/* $*1_type */
|
||||
$1 = new $*1_type [$1_dim0];
|
||||
for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
|
||||
$1[i] = *(($*1_ltype *)
|
||||
caml_ptr_val(caml_array_nth($input,i),
|
||||
$*1_descriptor)) ;
|
||||
}
|
||||
}
|
||||
#else
|
||||
%typemap(in) SWIGTYPE [] {
|
||||
int i;
|
||||
|
||||
/* $*1_type */
|
||||
$1 = ($*1_type *)malloc( $1_size );
|
||||
for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
|
||||
$1[i] = *(($*1_ltype)
|
||||
caml_ptr_val(caml_array_nth($input),
|
||||
$*1_descriptor));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
%typemap(out) SWIGTYPE [] {
|
||||
int i;
|
||||
CAML_VALUE *fromval = caml_named_value("create_$ntype_from_ptr");
|
||||
$result = caml_array_new($1_dim0);
|
||||
|
||||
for( i = 0; i < $1_dim0; i++ ) {
|
||||
if( fromval ) {
|
||||
caml_array_set
|
||||
($result,
|
||||
i,
|
||||
callback(*fromval,caml_val_ptr((void *)&$1[i],$*1_descriptor)));
|
||||
} else {
|
||||
caml_array_set
|
||||
($result,
|
||||
i,
|
||||
caml_val_ptr ((void *)&$1[i],$&1_descriptor));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(in) enum SWIGTYPE [] {
|
||||
int i;
|
||||
|
||||
/* $*1_type */
|
||||
$1 = ($*1_type *)malloc( $1_size );
|
||||
for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
|
||||
$1[i] = ($type)
|
||||
caml_long_val_full(caml_array_nth($input),
|
||||
"$type_marker");
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(out) enum SWIGTYPE [] {
|
||||
int i;
|
||||
$result = caml_array_new($1_dim0);
|
||||
|
||||
for( i = 0; i < $1_dim0; i++ ) {
|
||||
caml_array_set
|
||||
($result,
|
||||
i,
|
||||
callback2(*caml_named_value(SWIG_MODULE "_int_to_enum"),
|
||||
*caml_named_value("$type_marker"),
|
||||
Val_int($1[i])));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
%typemap(freearg) SWIGTYPE [ANY] {
|
||||
delete [] $1;
|
||||
}
|
||||
#else
|
||||
%typemap(freearg) SWIGTYPE [ANY] {
|
||||
free( (void *)$1 );
|
||||
}
|
||||
#endif
|
||||
Reference in New Issue
Block a user