1 /* 2 For wchar support, you need to include the wchar.i file 3 before this file, ie: 4 5 %include <wchar.i> 6 %include <std_iostream.i> 7 8 or equivalently, just include 9 10 %include <std_wiostream.i> 11 */ 12 13 %include <std_ios.i> 14 %include <std_basic_string.i> 15 %include <std_string.i> 16 #if defined(SWIG_WCHAR) 17 %include <std_wstring.i> 18 #endif 19 20 %{ 21 #include <iostream> 22 %} 23 24 25 namespace std 26 { 27 // 27.6.2.1 Template class basic_ostream 28 template<typename _CharT, typename _Traits = char_traits<_CharT> > 29 class basic_ostream : virtual public basic_ios<_CharT, _Traits> 30 { 31 public: 32 // Types (inherited from basic_ios (27.4.4)): 33 typedef _CharT char_type; 34 typedef typename _Traits::int_type int_type; 35 typedef typename _Traits::pos_type pos_type; 36 typedef typename _Traits::off_type off_type; 37 typedef _Traits traits_type; 38 39 // 27.6.2.2 Constructor/destructor: 40 explicit 41 basic_ostream(basic_streambuf<_CharT, _Traits>* __sb); 42 43 virtual 44 ~basic_ostream(); 45 46 // 27.6.2.5 Formatted output: 47 // 27.6.2.5.3 basic_ostream::operator<< 48 basic_ostream<_CharT, _Traits>& 49 operator<<(basic_ostream<_CharT, _Traits>& (*__pf)(basic_ostream<_CharT, _Traits>&)); 50 51 52 basic_ostream<_CharT, _Traits>& 53 operator<<(basic_ios<_CharT, _Traits>& (*__pf)(basic_ios<_CharT, _Traits>&)); 54 55 56 basic_ostream<_CharT, _Traits>& 57 operator<<(ios_base& (*__pf) (ios_base&)); 58 59 // 27.6.2.5.2 Arithmetic Inserters 60 61 basic_ostream<_CharT, _Traits>& 62 operator<<(long __n); 63 64 basic_ostream<_CharT, _Traits>& 65 operator<<(unsigned long __n); 66 67 basic_ostream<_CharT, _Traits>& 68 operator<<(bool __n); 69 70 basic_ostream<_CharT, _Traits>& 71 operator<<(short __n); 72 73 basic_ostream<_CharT, _Traits>& 74 operator<<(unsigned short __n); 75 76 basic_ostream<_CharT, _Traits>& 77 operator<<(int __n); 78 79 basic_ostream<_CharT, _Traits>& 80 operator<<(unsigned int __n); 81 82 basic_ostream<_CharT, _Traits>& 83 operator<<(long long __n); 84 85 basic_ostream<_CharT, _Traits>& 86 operator<<(unsigned long long __n); 87 88 basic_ostream<_CharT, _Traits>& 89 operator<<(double __f); 90 91 basic_ostream<_CharT, _Traits>& 92 operator<<(float __f); 93 94 basic_ostream<_CharT, _Traits>& 95 operator<<(long double __f); 96 97 basic_ostream<_CharT, _Traits>& 98 operator<<(const void* __p); 99 100 basic_ostream<_CharT, _Traits>& 101 operator<<(basic_streambuf<_CharT, _Traits>* __sb); 102 103 %extend { 104 std::basic_ostream<_CharT, _Traits >& 105 operator<<(const std::basic_string<_CharT,_Traits, std::allocator<_CharT> >& s) 106 { 107 *self << s; 108 return *self; 109 } 110 } 111 112 // Unformatted output: 113 basic_ostream<_CharT, _Traits>& 114 put(char_type __c); 115 116 basic_ostream<_CharT, _Traits>& 117 write(const char_type* __s, streamsize __n); 118 119 basic_ostream<_CharT, _Traits>& 120 flush(); 121 122 // Seeks: 123 pos_type 124 tellp(); 125 126 basic_ostream<_CharT, _Traits>& 127 seekp(pos_type); 128 129 basic_ostream<_CharT, _Traits>& 130 seekp(off_type, ios_base::seekdir); 131 132 }; 133 134 // 27.6.1.1 Template class basic_istream 135 template<typename _CharT, typename _Traits = char_traits<_CharT> > 136 class basic_istream : virtual public basic_ios<_CharT, _Traits> 137 { 138 public: 139 // Types (inherited from basic_ios (27.4.4)): 140 typedef _CharT char_type; 141 typedef typename _Traits::int_type int_type; 142 typedef typename _Traits::pos_type pos_type; 143 typedef typename _Traits::off_type off_type; 144 typedef _Traits traits_type; 145 146 147 public: 148 // 27.6.1.1.1 Constructor/destructor: 149 explicit 150 basic_istream(basic_streambuf<_CharT, _Traits>* __sb); 151 152 virtual 153 ~basic_istream(); 154 155 // 27.6.1.2.3 basic_istream::operator>> 156 basic_istream<_CharT, _Traits>& 157 operator>>(basic_istream<_CharT, _Traits>& (*__pf)(basic_istream<_CharT, _Traits>&)); 158 159 basic_istream<_CharT, _Traits>& 160 operator>>(basic_ios<_CharT, _Traits>& (*__pf)(basic_ios<_CharT, _Traits>&)); 161 162 basic_istream<_CharT, _Traits>& 163 operator>>(ios_base& (*__pf)(ios_base&)); 164 165 // 27.6.1.2.2 Arithmetic Extractors 166 basic_istream<_CharT, _Traits>& 167 operator>>(bool& __n); 168 169 basic_istream<_CharT, _Traits>& 170 operator>>(short& __n); 171 172 basic_istream<_CharT, _Traits>& 173 operator>>(unsigned short& __n); 174 175 basic_istream<_CharT, _Traits>& 176 operator>>(int& __n); 177 178 basic_istream<_CharT, _Traits>& 179 operator>>(unsigned int& __n); 180 181 basic_istream<_CharT, _Traits>& 182 operator>>(long& __n); 183 184 basic_istream<_CharT, _Traits>& 185 operator>>(unsigned long& __n); 186 187 basic_istream<_CharT, _Traits>& 188 operator>>(long long& __n); 189 190 basic_istream<_CharT, _Traits>& 191 operator>>(unsigned long long& __n); 192 193 basic_istream<_CharT, _Traits>& 194 operator>>(float& __f); 195 196 basic_istream<_CharT, _Traits>& 197 operator>>(double& __f); 198 199 basic_istream<_CharT, _Traits>& 200 operator>>(long double& __f); 201 202 basic_istream<_CharT, _Traits>& 203 operator>>(void*& __p); 204 205 basic_istream<_CharT, _Traits>& 206 operator>>(basic_streambuf<_CharT, _Traits>* __sb); 207 208 // 27.6.1.3 Unformatted input: 209 inline streamsize 210 gcount(void) const; 211 212 int_type 213 get(void); 214 215 basic_istream<_CharT, _Traits>& 216 get(char_type& __c); 217 218 basic_istream<_CharT, _Traits>& 219 get(char_type* __s, streamsize __n, char_type __delim); 220 221 inline basic_istream<_CharT, _Traits>& 222 get(char_type* __s, streamsize __n); 223 224 basic_istream<_CharT, _Traits>& 225 get(basic_streambuf<_CharT, _Traits>& __sb, char_type __delim); 226 227 inline basic_istream<_CharT, _Traits>& 228 get(basic_streambuf<_CharT, _Traits>& __sb); 229 230 basic_istream<_CharT, _Traits>& 231 getline(char_type* __s, streamsize __n, char_type __delim); 232 233 inline basic_istream<_CharT, _Traits>& 234 getline(char_type* __s, streamsize __n); 235 236 basic_istream<_CharT, _Traits>& 237 ignore(streamsize __n = 1, int_type __delim = _Traits::eof()); 238 239 int_type 240 peek(void); 241 242 basic_istream<_CharT, _Traits>& 243 read(char_type* __s, streamsize __n); 244 245 streamsize 246 readsome(char_type* __s, streamsize __n); 247 248 basic_istream<_CharT, _Traits>& 249 putback(char_type __c); 250 251 basic_istream<_CharT, _Traits>& 252 unget(void); 253 254 int 255 sync(void); 256 257 pos_type 258 tellg(void); 259 260 basic_istream<_CharT, _Traits>& 261 seekg(pos_type); 262 263 basic_istream<_CharT, _Traits>& 264 seekg(off_type, ios_base::seekdir); 265 }; 266 267 // 27.6.1.5 Template class basic_iostream 268 template<typename _CharT, typename _Traits = char_traits<_CharT> > 269 class basic_iostream 270 : public basic_istream<_CharT, _Traits>, 271 public basic_ostream<_CharT, _Traits> 272 { 273 public: 274 typedef _CharT char_type; 275 typedef typename _Traits::int_type int_type; 276 typedef typename _Traits::pos_type pos_type; 277 typedef typename _Traits::off_type off_type; 278 typedef _Traits traits_type; 279 280 explicit 281 basic_iostream(basic_streambuf<_CharT, _Traits>* __sb); 282 283 virtual 284 ~basic_iostream(); 285 }; 286 287 typedef basic_ostream<char> ostream ; 288 typedef basic_istream<char> istream; 289 typedef basic_iostream<char> iostream; 290 291 extern istream cin; 292 extern ostream cout; 293 extern ostream cerr; 294 extern ostream clog; 295 296 #if defined(SWIG_WCHAR) 297 typedef basic_ostream<wchar_t> wostream; 298 typedef basic_istream<wchar_t> wistream; 299 typedef basic_iostream<wchar_t> wiostream; 300 301 extern wistream wcin; 302 extern wostream wcout; 303 extern wostream wcerr; 304 extern wostream wclog; 305 #endif 306 307 template<typename _CharT, typename _Traits = char_traits<_CharT> > 308 std::basic_ostream<_CharT, _Traits>& 309 endl(std::basic_ostream<_CharT, _Traits>&); 310 311 template<typename _CharT, typename _Traits = char_traits<_CharT> > 312 std::basic_ostream<_CharT, _Traits>& 313 ends(std::basic_ostream<_CharT, _Traits>&); 314 315 template<typename _CharT, typename _Traits = char_traits<_CharT> > 316 std::basic_ostream<_CharT, _Traits>& 317 flush(std::basic_ostream<_CharT, _Traits>&); 318 } 319 320 namespace std { 321 %template(ostream) basic_ostream<char>; 322 %template(istream) basic_istream<char>; 323 %template(iostream) basic_iostream<char>; 324 325 %template(endl) endl<char, std::char_traits<char> >; 326 %template(ends) ends<char, std::char_traits<char> >; 327 %template(flush) flush<char, std::char_traits<char> >; 328 329 #if defined(SWIG_WCHAR) 330 %template(wostream) basic_ostream<wchar_t>; 331 %template(wistream) basic_istream<wchar_t>; 332 %template(wiostream) basic_iostream<wchar_t>; 333 334 %template(wendl) endl<wchar_t, std::char_traits<wchar_t> >; 335 %template(wends) ends<wchar_t, std::char_traits<wchar_t> >; 336 %template(wflush) flush<wchar_t, std::char_traits<wchar_t> >; 337 #endif 338 } 339 340