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
00035
#ifndef _CPP_BITS_BASICIOS_H
00036
#define _CPP_BITS_BASICIOS_H 1
00037
00038
#pragma GCC system_header
00039
00040
#include <bits/streambuf_iterator.h>
00041
#include <bits/locale_facets.h>
00042
00043
namespace std
00044 {
00045
00046
template<
typename _CharT,
typename _Traits>
00047
class basic_ios :
public ios_base
00048 {
00049
public:
00050
00051
typedef _CharT char_type;
00052
typedef typename _Traits::int_type int_type;
00053
typedef typename _Traits::pos_type pos_type;
00054
typedef typename _Traits::off_type off_type;
00055
typedef _Traits traits_type;
00056
00057
00058
typedef ctype<_CharT> __ctype_type;
00059
typedef ostreambuf_iterator<_CharT, _Traits> __ostreambuf_iter;
00060
typedef num_put<_CharT, __ostreambuf_iter> __numput_type;
00061
typedef istreambuf_iterator<_CharT, _Traits> __istreambuf_iter;
00062
typedef num_get<_CharT, __istreambuf_iter> __numget_type;
00063
00064
00065
protected:
00066 basic_ostream<_CharT, _Traits>* _M_tie;
00067
mutable char_type _M_fill;
00068
mutable bool _M_fill_init;
00069 basic_streambuf<_CharT, _Traits>* _M_streambuf;
00070
00071
00072
const __ctype_type* _M_fctype;
00073
00074
const __numput_type* _M_fnumput;
00075
00076
const __numget_type* _M_fnumget;
00077
00078
public:
00079 operator void*()
const
00080
{
return this->fail() ? 0 : const_cast<basic_ios*>(
this); }
00081
00082
bool
00083 operator!()
const
00084
{
return this->fail(); }
00085
00086 iostate
00087 rdstate()
const
00088
{
return _M_streambuf_state; }
00089
00090
void
00091 clear(iostate __state = goodbit);
00092
00093
void
00094 setstate(iostate __state)
00095 { this->clear(this->rdstate() | __state); }
00096
00097
bool
00098 good()
const
00099
{
return this->rdstate() == 0; }
00100
00101
bool
00102 eof()
const
00103
{
return (this->rdstate() & eofbit) != 0; }
00104
00105
bool
00106 fail()
const
00107
{
return (this->rdstate() & (badbit | failbit)) != 0; }
00108
00109
bool
00110 bad()
const
00111
{
return (this->rdstate() & badbit) != 0; }
00112
00113 iostate
00114 exceptions()
const
00115
{
return _M_exception; }
00116
00117
void
00118 exceptions(iostate __except)
00119 {
00120 _M_exception = __except;
00121 this->clear(_M_streambuf_state);
00122 }
00123
00124
00125
explicit
00126 basic_ios(basic_streambuf<_CharT, _Traits>* __sb) : ios_base()
00127 { this->init(__sb); }
00128
00129
virtual
00130 ~basic_ios() { }
00131
00132
00133 basic_ostream<_CharT, _Traits>*
00134 tie()
const
00135
{
return _M_tie; }
00136
00137 basic_ostream<_CharT, _Traits>*
00138 tie(basic_ostream<_CharT, _Traits>* __tiestr)
00139 {
00140 basic_ostream<_CharT, _Traits>* __old = _M_tie;
00141 _M_tie = __tiestr;
00142
return __old;
00143 }
00144
00145 basic_streambuf<_CharT, _Traits>*
00146 rdbuf()
const
00147
{
return _M_streambuf; }
00148
00149 basic_streambuf<_CharT, _Traits>*
00150 rdbuf(basic_streambuf<_CharT, _Traits>* __sb);
00151
00152 basic_ios&
00153 copyfmt(
const basic_ios& __rhs);
00154
00155 char_type
00156
fill()
const
00157
{
00158
if (!_M_fill_init)
00159 {
00160 _M_fill = this->widen(
' ');
00161 _M_fill_init =
true;
00162 }
00163
return _M_fill;
00164 }
00165
00166 char_type
00167
fill(char_type __ch)
00168 {
00169 char_type __old = this->
fill();
00170 _M_fill = __ch;
00171
return __old;
00172 }
00173
00174
00175 locale
00176 imbue(
const locale& __loc);
00177
00178
char
00179 narrow(char_type __c,
char __dfault)
const;
00180
00181 char_type
00182 widen(
char __c)
const;
00183
00184
protected:
00185
00186 basic_ios() : ios_base()
00187 { }
00188
00189
void
00190 init(basic_streambuf<_CharT, _Traits>* __sb);
00191
00192
bool
00193 _M_check_facet(
const locale::facet* __f)
const
00194
{
00195
if (!__f)
00196 __throw_bad_cast();
00197
return true;
00198 }
00199
00200
void
00201 _M_cache_facets(
const locale& __loc);
00202 };
00203 }
00204
00205
#ifdef _GLIBCPP_NO_TEMPLATE_EXPORT
00206
# define export
00207
#include <bits/basic_ios.tcc>
00208
#endif
00209
00210
#endif