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
00050 template<typename _CharT, typename _Traits>
00051 class basic_ostream : virtual public basic_ios<_CharT, _Traits>
00052 {
00053 public:
00054
00055 typedef _CharT char_type;
00056 typedef typename _Traits::int_type int_type;
00057 typedef typename _Traits::pos_type pos_type;
00058 typedef typename _Traits::off_type off_type;
00059 typedef _Traits traits_type;
00060
00061
00062 typedef basic_streambuf<_CharT, _Traits> __streambuf_type;
00063 typedef basic_ios<_CharT, _Traits> __ios_type;
00064 typedef basic_ostream<_CharT, _Traits> __ostream_type;
00065 typedef ostreambuf_iterator<_CharT, _Traits> __ostreambuf_iter;
00066 typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
00067 typedef ctype<_CharT> __ctype_type;
00068
00069
00070 explicit
00071 basic_ostream(__streambuf_type* __sb)
00072 { this->init(__sb); }
00073
00074 virtual
00075 ~basic_ostream() { }
00076
00077
00078 class sentry;
00079 friend class sentry;
00080
00081
00082
00083 __ostream_type&
00084 operator<<(__ostream_type& (*__pf)(__ostream_type&));
00085
00086 __ostream_type&
00087 operator<<(__ios_type& (*__pf)(__ios_type&));
00088
00089 __ostream_type&
00090 operator<<(ios_base& (*__pf) (ios_base&));
00091
00092
00093 __ostream_type&
00094 operator<<(long __n);
00095
00096 __ostream_type&
00097 operator<<(unsigned long __n);
00098
00099 __ostream_type&
00100 operator<<(bool __n);
00101
00102 __ostream_type&
00103 operator<<(short __n)
00104 {
00105 ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
00106 if (__fmt & ios_base::oct || __fmt & ios_base::hex)
00107 return this->operator<<(static_cast<unsigned long>
00108 (static_cast<unsigned short>(__n)));
00109 else
00110 return this->operator<<(static_cast<long>(__n));
00111 }
00112
00113 __ostream_type&
00114 operator<<(unsigned short __n)
00115 { return this->operator<<(static_cast<unsigned long>(__n)); }
00116
00117 __ostream_type&
00118 operator<<(int __n)
00119 {
00120 ios_base::fmtflags __fmt = this->flags() & ios_base::basefield;
00121 if (__fmt & ios_base::oct || __fmt & ios_base::hex)
00122 return this->operator<<(static_cast<unsigned long>
00123 (static_cast<unsigned int>(__n)));
00124 else
00125 return this->operator<<(static_cast<long>(__n));
00126 }
00127
00128 __ostream_type&
00129 operator<<(unsigned int __n)
00130 { return this->operator<<(static_cast<unsigned long>(__n)); }
00131
00132 #ifdef _GLIBCPP_USE_LONG_LONG
00133 __ostream_type&
00134 operator<<(long long __n);
00135
00136 __ostream_type&
00137 operator<<(unsigned long long __n);
00138 #endif
00139
00140 __ostream_type&
00141 operator<<(double __f);
00142
00143 __ostream_type&
00144 operator<<(float __f)
00145 { return this->operator<<(static_cast<double>(__f)); }
00146
00147 __ostream_type&
00148 operator<<(long double __f);
00149
00150 __ostream_type&
00151 operator<<(const void* __p);
00152
00153 __ostream_type&
00154 operator<<(__streambuf_type* __sb);
00155
00156
00157 __ostream_type&
00158 put(char_type __c);
00159
00160 __ostream_type&
00161 write(const char_type* __s, streamsize __n);
00162
00163 __ostream_type&
00164 flush();
00165
00166
00167 pos_type
00168 tellp();
00169
00170 __ostream_type&
00171 seekp(pos_type);
00172
00173 __ostream_type&
00174 seekp(off_type, ios_base::seekdir);
00175 };
00176
00177
00178 template <typename _CharT, typename _Traits>
00179 class basic_ostream<_CharT, _Traits>::sentry
00180 {
00181
00182 bool _M_ok;
00183 basic_ostream<_CharT,_Traits>& _M_os;
00184
00185 public:
00186 explicit
00187 sentry(basic_ostream<_CharT,_Traits>& __os);
00188
00189 ~sentry()
00190 {
00191
00192 if (_M_os.flags() & ios_base::unitbuf && !uncaught_exception())
00193 {
00194
00195 if (_M_os.rdbuf() && _M_os.rdbuf()->pubsync() == -1)
00196 _M_os.setstate(ios_base::badbit);
00197 }
00198 }
00199
00200 operator bool()
00201 { return _M_ok; }
00202 };
00203
00204 template<typename _CharT, typename _Traits>
00205 basic_ostream<_CharT, _Traits>&
00206 operator<<(basic_ostream<_CharT, _Traits>& __out, _CharT __c);
00207
00208 template<typename _CharT, typename _Traits>
00209 basic_ostream<_CharT, _Traits>&
00210 operator<<(basic_ostream<_CharT, _Traits>& __out, char __c)
00211 { return (__out << __out.widen(__c)); }
00212
00213
00214 template <class _Traits>
00215 basic_ostream<char, _Traits>&
00216 operator<<(basic_ostream<char, _Traits>& __out, char __c);
00217
00218
00219 template<class _Traits>
00220 basic_ostream<char, _Traits>&
00221 operator<<(basic_ostream<char, _Traits>& __out, signed char __c)
00222 { return (__out << static_cast<char>(__c)); }
00223
00224 template<class _Traits>
00225 basic_ostream<char, _Traits>&
00226 operator<<(basic_ostream<char, _Traits>& __out, unsigned char __c)
00227 { return (__out << static_cast<char>(__c)); }
00228
00229 template<typename _CharT, typename _Traits>
00230 basic_ostream<_CharT, _Traits>&
00231 operator<<(basic_ostream<_CharT, _Traits>& __out, const _CharT* __s);
00232
00233 template<typename _CharT, typename _Traits>
00234 basic_ostream<_CharT, _Traits> &
00235 operator<<(basic_ostream<_CharT, _Traits>& __out, const char* __s);
00236
00237
00238 template<class _Traits>
00239 basic_ostream<char, _Traits>&
00240 operator<<(basic_ostream<char, _Traits>& __out, const char* __s);
00241
00242
00243 template<class _Traits>
00244 basic_ostream<char, _Traits>&
00245 operator<<(basic_ostream<char, _Traits>& __out, const signed char* __s)
00246 { return (__out << reinterpret_cast<const char*>(__s)); }
00247
00248 template<class _Traits>
00249 basic_ostream<char, _Traits> &
00250 operator<<(basic_ostream<char, _Traits>& __out, const unsigned char* __s)
00251 { return (__out << reinterpret_cast<const char*>(__s)); }
00252
00253
00254 template<typename _CharT, typename _Traits>
00255 basic_ostream<_CharT, _Traits>&
00256 endl(basic_ostream<_CharT, _Traits>& __os)
00257 { return flush(__os.put(__os.widen('\n'))); }
00258
00259 template<typename _CharT, typename _Traits>
00260 basic_ostream<_CharT, _Traits>&
00261 ends(basic_ostream<_CharT, _Traits>& __os)
00262 { return __os.put(_CharT()); }
00263
00264 template<typename _CharT, typename _Traits>
00265 basic_ostream<_CharT, _Traits>&
00266 flush(basic_ostream<_CharT, _Traits>& __os)
00267 { return __os.flush(); }
00268
00269 }
00270
00271 #ifdef _GLIBCPP_NO_TEMPLATE_EXPORT
00272 # define export
00273 #endif
00274 #ifdef _GLIBCPP_FULLY_COMPLIANT_HEADERS
00275 # include <bits/ostream.tcc>
00276 #endif
00277
00278 #endif