summaryrefslogtreecommitdiff
path: root/Lib/ocaml/std_string.i
diff options
context:
space:
mode:
authorArt Yerkes <ayerkes@speakeasy.net>2003-02-27 07:09:12 +0000
committerArt Yerkes <ayerkes@speakeasy.net>2003-02-27 07:09:12 +0000
commitb8490f9c18903ee5c07b76aa1e12fc0812aaf0f9 (patch)
treec33049a7389660f6e38828826bc3547b106e06d2 /Lib/ocaml/std_string.i
parentcfe7be1eedd1d5c578795d8c44272374b63ef3de (diff)
downloadswig-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.i25
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;
}