diff options
author | Art Yerkes <ayerkes@speakeasy.net> | 2003-02-27 07:09:12 +0000 |
---|---|---|
committer | Art Yerkes <ayerkes@speakeasy.net> | 2003-02-27 07:09:12 +0000 |
commit | b8490f9c18903ee5c07b76aa1e12fc0812aaf0f9 (patch) | |
tree | c33049a7389660f6e38828826bc3547b106e06d2 /Lib/ocaml/std_string.i | |
parent | cfe7be1eedd1d5c578795d8c44272374b63ef3de (diff) | |
download | swig-b8490f9c18903ee5c07b76aa1e12fc0812aaf0f9.tar.gz |
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
Diffstat (limited to 'Lib/ocaml/std_string.i')
-rw-r--r-- | Lib/ocaml/std_string.i | 25 |
1 files changed, 18 insertions, 7 deletions
diff --git a/Lib/ocaml/std_string.i b/Lib/ocaml/std_string.i index 5b32bba56..d789f5161 100644 --- a/Lib/ocaml/std_string.i +++ b/Lib/ocaml/std_string.i @@ -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; } |