~ubuntu-branches/ubuntu/edgy/swig1.3/edgy

« back to all changes in this revision

Viewing changes to Lib/chicken/std_string.i

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-12-05 01:16:04 UTC
  • mfrom: (1.2.2 upstream)
  • Revision ID: james.westby@ubuntu.com-20051205011604-ygx904it6413k3go
Tags: 1.3.27-1ubuntu1
Resynchronise with Debian again, for the new subversion packages.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
// SWIG typemaps for std::string
 
2
// copied from the guile std_string.i and modified
 
3
 
 
4
%{
 
5
#include <string>
 
6
%}
 
7
 
 
8
namespace std {
 
9
 
 
10
    %insert(closprefix) %{ (declare (hide <std-string>)) %}
 
11
    %nodefault string;
 
12
    %rename("std-string") string;
 
13
    class string {
 
14
      public:
 
15
        ~string() {}
 
16
    };
 
17
    %extend string {
 
18
      char *str;
 
19
    }
 
20
    %{
 
21
      #define std_string_str_get(s) ((char *)((s)->c_str()))
 
22
      #define std_string_str_set(s,v) (s->assign((char *)(v)))
 
23
    %}
 
24
 
 
25
    %typemap(typecheck) string = char *;
 
26
    %typemap(typecheck) const string & = char *;
 
27
 
 
28
    %typemap(in) string (char* tempptr) {
 
29
      if ($input == C_SCHEME_FALSE) {
 
30
        $1 = std::string();
 
31
      } else { 
 
32
        if (!C_swig_is_string ($input)) {
 
33
          swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, 
 
34
                     "Argument #$argnum is not a string");
 
35
        }
 
36
        tempptr = SWIG_MakeString($input);
 
37
        $1 = std::string(tempptr);
 
38
        if (tempptr) SWIG_free(tempptr);
 
39
      }
 
40
    }
 
41
 
 
42
    %typemap(in) const string& (std::string temp,
 
43
                         char* tempptr) {
 
44
 
 
45
      if ($input == C_SCHEME_FALSE) {
 
46
        temp = std::string();
 
47
        $1 = &temp;
 
48
      } else { 
 
49
        if (!C_swig_is_string ($input)) {
 
50
          swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, 
 
51
                     "Argument #$argnum is not a string");
 
52
        }
 
53
        tempptr = SWIG_MakeString($input);
 
54
        temp = std::string(tempptr);
 
55
        if (tempptr) SWIG_free(tempptr);
 
56
        $1 = &temp;
 
57
      }
 
58
    }
 
59
 
 
60
    %typemap(out) string { 
 
61
      int size = $1.size();
 
62
      C_word *space = C_alloc (C_SIZEOF_STRING (size));
 
63
      $result = C_string (&space, size, (char *) $1.c_str());
 
64
    }
 
65
 
 
66
    %typemap(out) const string& { 
 
67
      int size = $1->size();
 
68
      C_word *space = C_alloc (C_SIZEOF_STRING (size));
 
69
      $result = C_string (&space, size, (char *) $1->c_str());
 
70
    }
 
71
 
 
72
    %typemap(varin) string {
 
73
      if ($input == C_SCHEME_FALSE) {
 
74
        $1 = std::string();
 
75
      } else { 
 
76
        char *tempptr;
 
77
        if (!C_swig_is_string ($input)) {
 
78
          swig_barf (SWIG_BARF1_BAD_ARGUMENT_TYPE, 
 
79
                     "Argument #$argnum is not a string");
 
80
        }
 
81
        tempptr = SWIG_MakeString($input);
 
82
        $1 = std::string(tempptr);
 
83
        if (tempptr) SWIG_free(tempptr);
 
84
      }
 
85
    }
 
86
 
 
87
    %typemap(varout) string { 
 
88
      int size = $1.size();
 
89
      C_word *space = C_alloc (C_SIZEOF_STRING (size));
 
90
      $result = C_string (&space, size, (char *) $1.c_str());
 
91
    }
 
92
}