summaryrefslogtreecommitdiff
path: root/share/swig/2.0.11/ocaml/carray.i
diff options
context:
space:
mode:
Diffstat (limited to 'share/swig/2.0.11/ocaml/carray.i')
-rw-r--r--share/swig/2.0.11/ocaml/carray.i136
1 files changed, 136 insertions, 0 deletions
diff --git a/share/swig/2.0.11/ocaml/carray.i b/share/swig/2.0.11/ocaml/carray.i
new file mode 100644
index 0000000..bbf1ddd
--- /dev/null
+++ b/share/swig/2.0.11/ocaml/carray.i
@@ -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