Added to typemaps: reference type in/out

Strings <=> std::string by value
std::wstring accessible from Ocaml.  The string example converts a multibyte
japanese EUC sequence to a single wchar_t sequence if you have the ja_JP.EUC-JP
locale, or similar.
Better handling of reference in types
Corrected problems with & * mismatch in type verifier.
Type verifier now really functional.  No more type errors in places they
wouldn't be allowed in C++, unless you work at it.
Added argout_ref example for argout_ref.
Init code now effective (called from let _ = f_<module>_init ())


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@4412 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Art Yerkes 2003-02-27 07:09:12 +00:00
commit b8490f9c18
10 changed files with 190 additions and 58 deletions

View file

@ -70,9 +70,10 @@ namespace std {
%template(string) basic_string<char>;
%template(wstring) basic_string<wchar_t>;
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
/* Overloading check */
#if 0
%typemap(in) string {
if (caml_ptr_check($input))
$1 = std::string((char *)caml_ptr_val($input,0));
@ -89,16 +90,26 @@ namespace std {
}
}
%typemap(in) string & (std::string temp) {
if (caml_ptr_check($input)) {
temp = std::string((char *)caml_ptr_val($input,0));
$1 = &temp;
} else {
SWIG_exception(SWIG_TypeError, "string expected");
}
}
%typemap(argout) string & {
caml_list_append(swig_result,caml_val_string_len($1->c_str(),
$1->size()));
}
%typemap(out) string {
$result = caml_val_ptr((char *)$1.c_str(),0);
$result = caml_val_string_len($1.c_str(),$1.size());
}
%typemap(out) const string & {
$result = caml_val_ptr((char *)$1->c_str(),0);
$result = caml_val_string_len($1.c_str(),$1.size());
}
#endif
typedef basic_string<char> string;
typedef basic_string<wchar_t> wstring;
}