Upstream version 1.3.40
[profile/ivi/swig.git] / Lib / guile / std_string.i
1 /* -----------------------------------------------------------------------------
2  * See the LICENSE file for information on copyright, usage and redistribution
3  * of SWIG, and the README file for authors - http://www.swig.org/release.html.
4  *
5  * std_string.i
6  *
7  * SWIG typemaps for std::string
8  * ----------------------------------------------------------------------------- */
9
10 // ------------------------------------------------------------------------
11 // std::string is typemapped by value
12 // This can prevent exporting methods which return a string
13 // in order for the user to modify it.
14 // However, I think I'll wait until someone asks for it...
15 // ------------------------------------------------------------------------
16
17 %include <exception.i>
18
19 %{
20 #include <string>
21 %}
22
23 namespace std {
24
25     %naturalvar string;
26
27     class string;
28
29     %typemap(typecheck) string = char *;
30     %typemap(typecheck) const string & = char *;
31
32     %typemap(in) string (char* tempptr) {
33         if (gh_string_p($input)) {
34             tempptr = SWIG_scm2str($input);
35             $1.assign(tempptr);
36             if (tempptr) SWIG_free(tempptr);
37         } else {
38             SWIG_exception(SWIG_TypeError, "string expected");
39         }
40     }
41
42     %typemap(in) const string & (std::string temp,
43                                  char* tempptr) {
44         if (gh_string_p($input)) {
45             tempptr = SWIG_scm2str($input);
46             temp.assign(tempptr);
47             if (tempptr) SWIG_free(tempptr);
48             $1 = &temp;
49         } else {
50             SWIG_exception(SWIG_TypeError, "string expected");
51         }
52     }
53
54     %typemap(in) string * (char* tempptr) {
55         if (gh_string_p($input)) {
56             tempptr = SWIG_scm2str($input);
57             $1 = new std::string(tempptr);
58             if (tempptr) SWIG_free(tempptr);
59         } else {
60             SWIG_exception(SWIG_TypeError, "string expected");
61         }
62     }
63
64     %typemap(out) string {
65         $result = gh_str02scm($1.c_str());
66     }
67
68     %typemap(out) const string & {
69         $result = gh_str02scm($1->c_str());
70     }
71
72     %typemap(out) string * {
73         $result = gh_str02scm($1->c_str());
74     }
75
76     %typemap(varin) string {
77         if (gh_string_p($input)) {
78             char *tempptr = SWIG_scm2str($input);
79             $1.assign(tempptr);
80             if (tempptr) SWIG_free(tempptr);
81         } else {
82             SWIG_exception(SWIG_TypeError, "string expected");
83         }
84     }
85
86     %typemap(varout) string {
87         $result = gh_str02scm($1.c_str());
88     }
89
90 }