1%include <exception.i>
2%include <std_container.i>
3%include <std_alloc.i>
4%include <std_char_traits.i>
5
6
7%{
8#include <string>
9%}
10
11namespace std
12{
13  %naturalvar basic_string;
14}
15
16
17namespace std {
18
19  template <class _CharT, class _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> >
20  class basic_string
21  {
22#if !defined(SWIG_STD_MODERN_STL) || defined(SWIG_STD_NOMODERN_STL)
23    %ignore push_back;
24    %ignore clear;
25    %ignore compare;
26    %ignore append;
27#endif
28
29  public:
30    typedef size_t size_type;
31    typedef ptrdiff_t difference_type;
32    typedef _CharT value_type;
33    typedef value_type reference;
34    typedef value_type const_reference;
35    typedef _Alloc allocator_type;
36
37    static const size_type npos;
38
39#ifdef SWIG_EXPORT_ITERATOR_METHODS
40  class iterator;
41  class reverse_iterator;
42  class const_iterator;
43  class const_reverse_iterator;
44#endif
45
46
47    %traits_swigtype(_CharT);
48    %fragment(SWIG_Traits_frag(_CharT));
49
50
51    basic_string(const _CharT* __s, size_type __n);
52
53    // Capacity:
54
55    size_type length() const;
56
57    size_type max_size() const;
58
59    size_type capacity() const;
60
61    void reserve(size_type __res_arg = 0);
62
63
64    // Modifiers:
65
66    basic_string&
67    append(const basic_string& __str);
68
69    basic_string&
70    append(const basic_string& __str, size_type __pos, size_type __n);
71
72    basic_string&
73    append(const _CharT* __s, size_type __n);
74
75    basic_string&
76    append(size_type __n, _CharT __c);
77
78    basic_string&
79    assign(const basic_string& __str);
80
81    basic_string&
82    assign(const basic_string& __str, size_type __pos, size_type __n);
83
84    basic_string&
85    assign(const _CharT* __s, size_type __n);
86
87    basic_string&
88    insert(size_type __pos1, const basic_string& __str);
89
90    basic_string&
91    insert(size_type __pos1, const basic_string& __str,
92	   size_type __pos2, size_type __n);
93
94    basic_string&
95    insert(size_type __pos, const _CharT* __s, size_type __n);
96
97    basic_string&
98    insert(size_type __pos, size_type __n, _CharT __c);
99
100    basic_string&
101    erase(size_type __pos = 0, size_type __n = npos);
102
103    basic_string&
104    replace(size_type __pos, size_type __n, const basic_string& __str);
105
106    basic_string&
107    replace(size_type __pos1, size_type __n1, const basic_string& __str,
108	    size_type __pos2, size_type __n2);
109
110    basic_string&
111    replace(size_type __pos, size_type __n1, const _CharT* __s,
112	    size_type __n2);
113
114    basic_string&
115    replace(size_type __pos, size_type __n1, size_type __n2, _CharT __c);
116
117
118    size_type
119    copy(_CharT* __s, size_type __n, size_type __pos = 0) const;
120
121    // String operations:
122    const _CharT* c_str() const;
123
124    size_type
125    find(const _CharT* __s, size_type __pos, size_type __n) const;
126
127    size_type
128    find(const basic_string& __str, size_type __pos = 0) const;
129
130    size_type
131    find(_CharT __c, size_type __pos = 0) const;
132
133    size_type
134    rfind(const basic_string& __str, size_type __pos = npos) const;
135
136    size_type
137    rfind(const _CharT* __s, size_type __pos, size_type __n) const;
138
139    size_type
140    rfind(_CharT __c, size_type __pos = npos) const;
141
142    size_type
143    find_first_of(const basic_string& __str, size_type __pos = 0) const;
144
145    size_type
146    find_first_of(const _CharT* __s, size_type __pos, size_type __n) const;
147
148    size_type
149    find_first_of(_CharT __c, size_type __pos = 0) const;
150
151    size_type
152    find_last_of(const basic_string& __str, size_type __pos = npos) const;
153
154    size_type
155    find_last_of(const _CharT* __s, size_type __pos, size_type __n) const;
156
157    size_type
158    find_last_of(_CharT __c, size_type __pos = npos) const;
159
160    size_type
161    find_first_not_of(const basic_string& __str, size_type __pos = 0) const;
162
163    size_type
164    find_first_not_of(const _CharT* __s, size_type __pos,
165		      size_type __n) const;
166
167    size_type
168    find_first_not_of(_CharT __c, size_type __pos = 0) const;
169
170    size_type
171    find_last_not_of(const basic_string& __str, size_type __pos = npos) const;
172
173    size_type
174    find_last_not_of(const _CharT* __s, size_type __pos,
175		     size_type __n) const;
176
177    size_type
178    find_last_not_of(_CharT __c, size_type __pos = npos) const;
179
180    basic_string
181    substr(size_type __pos = 0, size_type __n = npos) const;
182
183    int
184    compare(const basic_string& __str) const;
185
186    int
187    compare(size_type __pos, size_type __n, const basic_string& __str) const;
188
189    int
190    compare(size_type __pos1, size_type __n1, const basic_string& __str,
191	    size_type __pos2, size_type __n2) const;
192
193
194    %ignore pop_back();
195    %ignore front() const;
196    %ignore back() const;
197    %ignore basic_string(size_type n);
198    %std_sequence_methods_val(basic_string);
199
200
201    %ignore pop();
202
203
204#ifdef %swig_basic_string
205    // Add swig/language extra methods
206    %swig_basic_string(std::basic_string<_CharT, _Traits, _Alloc >);
207#endif
208
209#ifdef SWIG_EXPORT_ITERATOR_METHODS
210
211
212    class iterator;
213    class reverse_iterator;
214    class const_iterator;
215    class const_reverse_iterator;
216
217
218    void
219    insert(iterator __p, size_type __n, _CharT __c);
220
221    basic_string&
222    replace(iterator __i1, iterator __i2, const basic_string& __str);
223
224    basic_string&
225    replace(iterator __i1, iterator __i2, const _CharT* __s, size_type __n);
226
227    basic_string&
228    replace(iterator __i1, iterator __i2, size_type __n, _CharT __c);
229
230
231    basic_string&
232    replace(iterator __i1, iterator __i2, const _CharT* __k1, const _CharT* __k2);
233
234    basic_string&
235    replace(iterator __i1, iterator __i2, const_iterator __k1, const_iterator __k2);
236#endif
237
238    basic_string& operator +=(const basic_string& v);
239
240    %newobject __add__;
241    %newobject __radd__;
242    %extend {
243
244      std::basic_string<_CharT,_Traits,_Alloc >* __add__(const basic_string& v) {
245	std::basic_string<_CharT,_Traits,_Alloc >* res = new std::basic_string<_CharT,_Traits,_Alloc >(*self);
246	*res += v;
247	return res;
248      }
249
250      std::basic_string<_CharT,_Traits,_Alloc >* __radd__(const basic_string& v) {
251	std::basic_string<_CharT,_Traits,_Alloc >* res = new std::basic_string<_CharT,_Traits,_Alloc >(v);
252	*res += *self;
253	return res;
254      }
255
256      std::basic_string<_CharT,_Traits,_Alloc > __str__() {
257	return *self;
258      }
259
260      std::basic_ostream<_CharT, std::char_traits<_CharT> >&
261	__rlshift__(std::basic_ostream<_CharT, std::char_traits<_CharT> >& out) {
262	out << *self;
263	return out;
264      }
265    }
266
267  };
268}
269
270
271