summaryrefslogtreecommitdiff
path: root/trunk/Lib/chicken/std_string.i
diff options
context:
space:
mode:
authorWilliam S Fulton <wsf@fultondesigns.co.uk>2010-06-02 20:53:17 +0000
committerWilliam S Fulton <wsf@fultondesigns.co.uk>2010-06-02 20:53:17 +0000
commit2824b0cbb66e715490e1ef13250bd675d87b32d9 (patch)
treec3bc8d54c6d73f2b7ce08cac34172dbc9f5e5b95 /trunk/Lib/chicken/std_string.i
parent289cfef4b4766ff266f3b1bdda8ca3a952e5a047 (diff)
downloadswig-39489534f6104d5a2938392418dbb7189c037f8b.tar.gz
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/tags/rel-2.0.0@12089 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'trunk/Lib/chicken/std_string.i')
-rw-r--r--trunk/Lib/chicken/std_string.i96
1 files changed, 96 insertions, 0 deletions
diff --git a/trunk/Lib/chicken/std_string.i b/trunk/Lib/chicken/std_string.i
new file mode 100644
index 000000000..9907a58bc
--- /dev/null
+++ b/trunk/Lib/chicken/std_string.i
@@ -0,0 +1,96 @@
+/* -----------------------------------------------------------------------------
+ * std_string.i
+ *
+ * SWIG typemaps for std::string
+ * ----------------------------------------------------------------------------- */
+
+%{
+#include <string>
+%}
+
+namespace std {
+ %naturalvar string;
+
+
+ %insert(closprefix) %{ (declare (hide <std-string>)) %}
+ %nodefault string;
+ %rename("std-string") string;
+ class string {
+ public:
+ ~string() {}
+ };
+ %extend string {
+ char *str;
+ }
+ %{
+ #define std_string_str_get(s) ((char *)((s)->c_str()))
+ #define std_string_str_set(s,v) (s->assign((char *)(v)))
+ %}
+
+ %typemap(typecheck) string = char *;
+ %typemap(typecheck) const string & = char *;
+
+ %typemap(in) string (char * tempptr) {
+ if ($input == C_SCHEME_FALSE) {
+ $1.resize(0);
+ } else {
+ if (!C_swig_is_string ($input)) {
+ swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE,
+ "Argument #$argnum is not a string");
+ }
+ tempptr = SWIG_MakeString($input);
+ $1.assign(tempptr);
+ if (tempptr) SWIG_free(tempptr);
+ }
+ }
+
+ %typemap(in) const string& (std::string temp, char *tempptr) {
+
+ if ($input == C_SCHEME_FALSE) {
+ temp.resize(0);
+ $1 = &temp;
+ } else {
+ if (!C_swig_is_string ($input)) {
+ swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE,
+ "Argument #$argnum is not a string");
+ }
+ tempptr = SWIG_MakeString($input);
+ temp.assign(tempptr);
+ if (tempptr) SWIG_free(tempptr);
+ $1 = &temp;
+ }
+ }
+
+ %typemap(out) string {
+ int size = $1.size();
+ C_word *space = C_alloc (C_SIZEOF_STRING (size));
+ $result = C_string (&space, size, (char *) $1.c_str());
+ }
+
+ %typemap(out) const string& {
+ int size = $1->size();
+ C_word *space = C_alloc (C_SIZEOF_STRING (size));
+ $result = C_string (&space, size, (char *) $1->c_str());
+ }
+
+ %typemap(varin) string {
+ if ($input == C_SCHEME_FALSE) {
+ $1.resize(0);
+ } else {
+ char *tempptr;
+ if (!C_swig_is_string ($input)) {
+ swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE,
+ "Argument #$argnum is not a string");
+ }
+ tempptr = SWIG_MakeString($input);
+ $1.assign(tempptr);
+ if (tempptr) SWIG_free(tempptr);
+ }
+ }
+
+ %typemap(varout) string {
+ int size = $1.size();
+ C_word *space = C_alloc (C_SIZEOF_STRING (size));
+ $result = C_string (&space, size, (char *) $1.c_str());
+ }
+}