123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- %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
|