PageRenderTime 21ms CodeModel.GetById 8ms app.highlight 6ms RepoModel.GetById 1ms app.codeStats 0ms

/tags/rel-1-3-25/SWIG/Lib/ocaml/carray.i

#
Swig | 136 lines | 114 code | 17 blank | 5 comment | 0 complexity | 0bc2bb006fe52c090d0b2374e2cec1e7 MD5 | raw file
Possible License(s): LGPL-2.1, Cube, GPL-3.0, 0BSD, GPL-2.0
  1%insert(mli) %{
  2type _value = c_obj
  3%}
  4
  5%insert(ml) %{
  6type _value = c_obj
  7%}
  8
  9%define %array_tmap_out(type,what,out_f)
 10%typemap(type) what [ANY] {
 11    int i;
 12    /* $*1_type */
 13    $result = caml_array_new($1_dim0);
 14    for( i = 0; i < $1_dim0; i++ ) {
 15	caml_array_set($result,i,out_f($1[i]));
 16    }
 17}
 18%enddef
 19
 20%define %array_tmap_in(type,what,in_f)
 21%typemap(type) what [ANY] {
 22    int i;
 23    /* $*1_type */
 24    $1 = ($*1_type *)malloc( $1_size );
 25    for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
 26	$1[i] = in_f(caml_array_nth($input,i));
 27    }
 28}
 29
 30%typemap(free) what [ANY] {
 31    free( (void *)$1 );
 32}
 33%enddef
 34
 35%define %make_simple_array_typemap(type,out_f,in_f)
 36%array_tmap_out(out,type,out_f);
 37%array_tmap_out(varout,type,out_f);
 38%array_tmap_out(directorin,type,out_f);
 39
 40%array_tmap_in(in,type,in_f);
 41%array_tmap_in(varin,type,in_f);
 42%array_tmap_in(directorout,type,in_f);
 43%enddef
 44
 45%make_simple_array_typemap(bool,caml_val_bool,caml_long_val);
 46%make_simple_array_typemap(short,caml_val_short,caml_long_val);
 47%make_simple_array_typemap(unsigned short,caml_val_ushort,caml_long_val);
 48%make_simple_array_typemap(int,caml_val_int,caml_long_val);
 49%make_simple_array_typemap(unsigned int,caml_val_uint,caml_long_val);
 50%make_simple_array_typemap(long,caml_val_long,caml_long_val);
 51%make_simple_array_typemap(unsigned long,caml_val_ulong,caml_long_val);
 52%make_simple_array_typemap(size_t,caml_val_int,caml_long_val);
 53%make_simple_array_typemap(float,caml_val_float,caml_double_val);
 54%make_simple_array_typemap(double,caml_val_double,caml_double_val);
 55
 56#ifdef __cplusplus
 57%typemap(in) SWIGTYPE [] {
 58    int i;
 59
 60    /* $*1_type */
 61    $1 = new $*1_type [$1_dim0];
 62    for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
 63	$1[i] = *(($*1_ltype *) 
 64		caml_ptr_val(caml_array_nth($input,i),
 65			     $*1_descriptor)) ;
 66    }
 67}
 68#else
 69%typemap(in) SWIGTYPE [] {
 70    int i;
 71
 72    /* $*1_type */
 73    $1 = ($*1_type *)malloc( $1_size );
 74    for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
 75	$1[i] = *(($*1_ltype)
 76		caml_ptr_val(caml_array_nth($input),
 77			     $*1_descriptor));
 78    }
 79}
 80#endif
 81
 82%typemap(out) SWIGTYPE [] {
 83    int i;
 84    CAML_VALUE *fromval = caml_named_value("create_$ntype_from_ptr");
 85    $result = caml_array_new($1_dim0);
 86
 87    for( i = 0; i < $1_dim0; i++ ) {
 88	if( fromval ) {
 89	    caml_array_set 
 90		($result,
 91		 i,
 92		 callback(*fromval,caml_val_ptr((void *)&$1[i],$*1_descriptor)));
 93	} else {
 94	    caml_array_set
 95		($result,
 96		 i,
 97		 caml_val_ptr ((void *)&$1[i],$&1_descriptor));
 98	}
 99    }
100}
101
102%typemap(in) enum SWIGTYPE [] {
103    int i;
104
105    /* $*1_type */
106    $1 = ($*1_type *)malloc( $1_size );
107    for( i = 0; i < $1_dim0 && i < caml_array_len($input); i++ ) {
108	$1[i] = ($type)
109		caml_long_val_full(caml_array_nth($input),
110			           "$type_marker");
111    }
112}
113
114%typemap(out) enum SWIGTYPE [] {
115    int i;
116    $result = caml_array_new($1_dim0);
117
118    for( i = 0; i < $1_dim0; i++ ) {
119	    caml_array_set 
120		($result,
121		 i,
122		 callback2(*caml_named_value(SWIG_MODULE "_int_to_enum"),
123			   *caml_named_value("$type_marker"),
124			   Val_int($1[i])));
125    }
126}
127
128#ifdef __cplusplus
129%typemap(freearg) SWIGTYPE [ANY] {
130    delete [] $1;
131}
132#else
133%typemap(freearg) SWIGTYPE [ANY] {
134    free( (void *)$1 );
135}
136#endif