00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00040 #ifndef _CPP_OSTREAM
00041 #define _CPP_OSTREAM 1
00042
00043 #pragma GCC system_header
00044
00045 #include <ios>
00046
00047 namespace std
00048 {
00049
00057 template<typename _CharT, typename _Traits>
00058 class basic_ostream : virtual public basic_ios<_CharT, _Traits>
00059 {
00060 public:
00061
00062 typedef _CharT char_type;
00063 typedef typename _Traits::int_type int_type;
00064 typedef typename _Traits::pos_type pos_type;
00065 typedef typename _Traits::off_type off_type;
00066 typedef _Traits traits_type;
00067
00068
00069 typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
00070 typedef basic_ios<_CharT, _Traits> __ios_type;
00071 typedef basic_ostream<_CharT, _Traits> __ostream_type;
00072 typedef ostreambuf_iterator<_CharT, _Traits> __ostreambuf_iter;
00073 typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
00074 typedef ctype<_CharT> __ctype_type;
00075
00076 template<typename _CharT2, typename _Traits2>
00077 friend basic_ostream<_CharT2, _Traits2>&
00078 operator<<(basic_ostream<_CharT2, _Traits2>&, _CharT2);
00079
00080 template<typename _Traits2>
00081 friend basic_ostream<char, _Traits2>&
00082 operator<<(basic_ostream<char, _Traits2>&, char);
00083
00084 template<typename _CharT2, typename _Traits2>
00085 friend basic_ostream<_CharT2, _Traits2>&
00086 operator<<(basic_ostream<_CharT2, _Traits2>&, const _CharT2*);
00087
00088 template<typename _Traits2>
00089 friend basic_ostream<char, _Traits2>&
00090 operator<<(basic_ostream<char, _Traits2>&, const char*);
00091
00092 template<typename _CharT2, typename _Traits2>
00093 friend basic_ostream<_CharT2, _Traits2>&
00094 operator<<(basic_ostream<_CharT2, _Traits2>&, const char*);
00095
00096
00104 explicit
00105 basic_ostream(__streambuf_type* __sb)
00106 { this->init(__sb); }
00107
00113 virtual
00114 ~basic_ostream() { }
00115
00116
00117 class sentry;
00118 friend class sentry;
00119
00120
00121
00123
00130 __ostream_type&
00131 operator<<(__ostream_type& (*__pf)(__ostream_type&));
00132
00133 __ostream_type&
00134 operator<<(__ios_type& (*__pf)(__ios_type&));
00135
00136 __ostream_type&
00137 operator<<(ios_base& (*__pf) (ios_base&));
00139
00140
00167 __ostream_type&
00168 operator<<(long __n);
00169
00170 __ostream_type&
00171 operator<<(unsigned long __n);
00172
00173 __ostream_type&
00174 operator<<(bool __n);
00175
00176 __ostream_type&
00177 operator<<(short __n)
00178 {
00179 ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
00180 if (__fmt & ios_base::oct || __fmt & ios_base::hex)
00181 return this->operator<<(static_cast<unsigned long>
00182 (static_cast<unsigned short>(__n)));
00183 else
00184 return this->operator<<(static_cast<long>(__n));
00185 }
00186
00187 __ostream_type&
00188 operator<<(unsigned short __n)
00189 { return this->operator<<(static_cast<unsigned long>(__n)); }
00190
00191 __ostream_type&
00192 operator<<(int __n)
00193 {
00194 ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
00195 if (__fmt & ios_base::oct || __fmt & ios_base::hex)
00196 return this->operator<<(static_cast<unsigned long>
00197 (static_cast<unsigned int>(__n)));
00198 else
00199 return this->operator<<(static_cast<long>(__n));
00200 }
00201
00202 __ostream_type&
00203 operator<<(unsigned int __n)
00204 { return this->operator<<(static_cast<unsigned long>(__n)); }
00205
00206 #ifdef _GLIBCPP_USE_LONG_LONG
00207 __ostream_type&
00208 operator<<(long long __n);
00209
00210 __ostream_type&
00211 operator<<(unsigned long long __n);
00212 #endif
00213
00214 __ostream_type&
00215 operator<<(double __f);
00216
00217 __ostream_type&
00218 operator<<(float __f)
00219 { return this->operator<<(static_cast<double>(__f)); }
00220
00221 __ostream_type&
00222 operator<<(long double __f);
00223
00224 __ostream_type&
00225 operator<<(const void* __p);
00226
00248 __ostream_type&
00249 operator<<(__streambuf_type* __sb);
00251
00252
00281 __ostream_type&
00282 put(char_type __c);
00283
00300 __ostream_type&
00301 write(const char_type* __s, streamsize __n);
00303
00313 __ostream_type&
00314 flush();
00315
00316
00324 pos_type
00325 tellp();
00326
00335 __ostream_type&
00336 seekp(pos_type);
00337
00347 __ostream_type&
00348 seekp(off_type, ios_base::seekdir);
00349 };
00350
00361 template <typename _CharT, typename _Traits>
00362 class basic_ostream<_CharT, _Traits>::sentry
00363 {
00364
00365 bool _M_ok;
00366 basic_ostream<_CharT,_Traits>& _M_os;
00367
00368 public:
00380 explicit
00381 sentry(basic_ostream<_CharT,_Traits>& __os);
00382
00390 ~sentry()
00391 {
00392
00393 if (_M_os.flags() & ios_base::unitbuf && !uncaught_exception())
00394 {
00395
00396 if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
00397 _M_os.setstate(ios_base::badbit);
00398 }
00399 }
00400
00408 operator bool()
00409 { return _M_ok; }
00410 };
00411
00412
00414
00429 template<typename _CharT, typename _Traits>
00430 basic_ostream<_CharT, _Traits>&
00431 operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c);
00432
00433 template<typename _CharT, typename _Traits>
00434 basic_ostream<_CharT, _Traits>&
00435 operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
00436 { return (__out << __out.widen(__c)); }
00437
00438
00439 template <class _Traits>
00440 basic_ostream<char, _Traits>&
00441 operator<<(basic_ostream<char, _Traits>& __out, char __c);
00442
00443
00444 template<class _Traits>
00445 basic_ostream<char, _Traits>&
00446 operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
00447 { return (__out << static_cast<char>(__c)); }
00448
00449 template<class _Traits>
00450 basic_ostream<char, _Traits>&
00451 operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
00452 { return (__out << static_cast<char>(__c)); }
00454
00456
00469 template<typename _CharT, typename _Traits>
00470 basic_ostream<_CharT, _Traits>&
00471 operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s);
00472
00473 template<typename _CharT, typename _Traits>
00474 basic_ostream<_CharT, _Traits> &
00475 operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);
00476
00477
00478 template<class _Traits>
00479 basic_ostream<char, _Traits>&
00480 operator<<(basic_ostream<char, _Traits>& __out, const char* __s);
00481
00482
00483 template<class _Traits>
00484 basic_ostream<char, _Traits>&
00485 operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
00486 { return (__out << reinterpret_cast<const char*>(__s)); }
00487
00488 template<class _Traits>
00489 basic_ostream<char, _Traits> &
00490 operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
00491 { return (__out << reinterpret_cast<const char*>(__s)); }
00493
00494
00503 template<typename _CharT, typename _Traits>
00504 basic_ostream<_CharT, _Traits>&
00505 endl(basic_ostream<_CharT, _Traits>& __os)
00506 { return flush(__os.put(__os.widen('\n'))); }
00507
00514 template<typename _CharT, typename _Traits>
00515 basic_ostream<_CharT, _Traits>&
00516 ends(basic_ostream<_CharT, _Traits>& __os)
00517 { return __os.put(_CharT()); }
00518
00524 template<typename _CharT, typename _Traits>
00525 basic_ostream<_CharT, _Traits>&
00526 flush(basic_ostream<_CharT, _Traits>& __os)
00527 { return __os.flush(); }
00528
00529 }
00530
00531 #ifdef _GLIBCPP_NO_TEMPLATE_EXPORT
00532 # define export
00533 #endif
00534 #ifdef _GLIBCPP_FULLY_COMPLIANT_HEADERS
00535 # include <bits/ostream.tcc>
00536 #endif
00537
00538 #endif