Merge remote-tracking branch 'upstream/master' into OCaml-INPUT-OUTPUT-INOUT-primitives
This commit is contained in:
commit
5a58f9a87b
25 changed files with 354 additions and 23 deletions
|
|
@ -62,7 +62,7 @@ extern "C" {
|
|||
SWIG_TypeCheckStruct(source_type, dest_type );
|
||||
#ifdef TYPE_CAST_VERBOSE
|
||||
fprintf( stderr, "Typecheck -> %s\n",
|
||||
tc ? tc->str : "<none>" );
|
||||
tc ? tc->type->str : "<none>" );
|
||||
#endif
|
||||
if( tc ) {
|
||||
int newmemory = 0;
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
%include <std/std_except.i>
|
||||
|
||||
%apply size_t { std::size_t };
|
||||
%apply const size_t& { const std::size_t& };
|
||||
|
||||
%{
|
||||
#include <string>
|
||||
|
|
|
|||
|
|
@ -86,6 +86,7 @@ class wstring;
|
|||
%typemap(out) string * {
|
||||
$result = caml_val_string_len((*$1).c_str(),(*$1).size());
|
||||
}
|
||||
%typemap(typecheck) string, const string & = char *;
|
||||
}
|
||||
|
||||
#ifdef ENABLE_CHARPTR_ARRAY
|
||||
|
|
|
|||
|
|
@ -72,7 +72,8 @@
|
|||
long, signed long, unsigned long,
|
||||
long long, signed long long, unsigned long long,
|
||||
const long &, const signed long &, const unsigned long &,
|
||||
const long long &, const signed long long &, const unsigned long long &
|
||||
const long long &, const signed long long &, const unsigned long long &,
|
||||
size_t, const size_t &
|
||||
{
|
||||
if( !Is_block($input) ) $1 = 0;
|
||||
else {
|
||||
|
|
@ -135,24 +136,42 @@
|
|||
}
|
||||
|
||||
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE *, SWIGTYPE &, SWIGTYPE &&, SWIGTYPE [] {
|
||||
void *ptr;
|
||||
$1 = !caml_ptr_val_internal($input, &ptr,$descriptor);
|
||||
if (!Is_block($input) || !(SWIG_Tag_val($input) == C_obj || SWIG_Tag_val($input) == C_ptr)) {
|
||||
$1 = 0;
|
||||
} else {
|
||||
void *ptr;
|
||||
$1 = !caml_ptr_val_internal($input, &ptr, $descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
||||
%typecheck(SWIG_TYPECHECK_POINTER) SWIGTYPE {
|
||||
void *ptr;
|
||||
$1 = !caml_ptr_val_internal($input, &ptr, $&1_descriptor);
|
||||
swig_type_info *typeinfo;
|
||||
if (!Is_block($input)) {
|
||||
$1 = 0;
|
||||
} else {
|
||||
switch (SWIG_Tag_val($input)) {
|
||||
case C_obj: {
|
||||
void *ptr;
|
||||
$1 = !caml_ptr_val_internal($input, &ptr, $&1_descriptor);
|
||||
break;
|
||||
}
|
||||
case C_ptr: {
|
||||
typeinfo = (swig_type_info *)SWIG_Int64_val(SWIG_Field($input, 1));
|
||||
$1 = SWIG_TypeCheck("$1_type", typeinfo) != NULL;
|
||||
break;
|
||||
}
|
||||
default: $1 = 0; break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
%typecheck(SWIG_TYPECHECK_VOIDPTR) void * {
|
||||
void *ptr;
|
||||
$1 = !caml_ptr_val_internal($input, &ptr, 0);
|
||||
}
|
||||
|
||||
%typecheck(SWIG_TYPECHECK_SWIGOBJECT) CAML_VALUE "$1 = 1;"
|
||||
|
||||
%define INPUT_OUTPUT_INOUT_TYPEMAPS(type, c_to_ocaml, ocaml_to_c)
|
||||
%typemap(in) type *INPUT(type temp), type &INPUT(type temp) {
|
||||
temp = (type)ocaml_to_c($input);
|
||||
|
|
|
|||
|
|
@ -132,11 +132,11 @@
|
|||
%typemap(varin) C_NAME {
|
||||
$1 = OCAML_TO_C($input);
|
||||
}
|
||||
%typemap(in) C_NAME & ($*1_ltype temp) {
|
||||
%typemap(in) const C_NAME & ($*1_ltype temp) {
|
||||
temp = ($*1_ltype) OCAML_TO_C($input);
|
||||
$1 = &temp;
|
||||
}
|
||||
%typemap(varin) C_NAME & {
|
||||
%typemap(varin) const C_NAME & {
|
||||
$1 = OCAML_TO_C($input);
|
||||
}
|
||||
%typemap(directorout) C_NAME {
|
||||
|
|
@ -149,10 +149,10 @@
|
|||
%typemap(varout) C_NAME {
|
||||
$result = C_TO_OCAML($1);
|
||||
}
|
||||
%typemap(varout) C_NAME & {
|
||||
%typemap(varout) const C_NAME & {
|
||||
$result = C_TO_OCAML($1);
|
||||
}
|
||||
%typemap(out) C_NAME & {
|
||||
%typemap(out) const C_NAME & {
|
||||
$result = C_TO_OCAML(*$1);
|
||||
}
|
||||
%typemap(directorin) C_NAME {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue