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
#ifndef _BASIC_IOS_TCC
00031
#define _BASIC_IOS_TCC 1
00032
00033
#pragma GCC system_header
00034
00035
namespace std
00036 {
00037
template<
typename _CharT,
typename _Traits>
00038
void
00039 basic_ios<_CharT, _Traits>::clear(iostate __state)
00040 {
00041
if (this->
rdbuf())
00042 _M_streambuf_state = __state;
00043
else
00044 _M_streambuf_state = __state | badbit;
00045
if (this->
exceptions() & this->
rdstate())
00046 __throw_ios_failure(__N(
"basic_ios::clear"));
00047 }
00048
00049
template<
typename _CharT,
typename _Traits>
00050 basic_streambuf<_CharT, _Traits>*
00051 basic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __sb)
00052 {
00053 basic_streambuf<_CharT, _Traits>* __old = _M_streambuf;
00054 _M_streambuf = __sb;
00055 this->
clear();
00056
return __old;
00057 }
00058
00059
template<
typename _CharT,
typename _Traits>
00060
basic_ios<_CharT, _Traits>&
00061 basic_ios<_CharT, _Traits>::copyfmt(
const basic_ios& __rhs)
00062 {
00063
00064
00065
if (
this != &__rhs)
00066 {
00067
00068
00069
00070
00071 _Words* __words = (__rhs._M_word_size <= _S_local_word_size) ?
00072 _M_local_word :
new _Words[__rhs._M_word_size];
00073
00074
00075 _Callback_list* __cb = __rhs._M_callbacks;
00076
if (__cb)
00077 __cb->_M_add_reference();
00078 _M_call_callbacks(erase_event);
00079
if (_M_word != _M_local_word)
00080 {
00081
delete [] _M_word;
00082 _M_word = 0;
00083 }
00084 _M_dispose_callbacks();
00085
00086
00087 _M_callbacks = __cb;
00088
for (
int __i = 0; __i < __rhs._M_word_size; ++__i)
00089 __words[__i] = __rhs._M_word[__i];
00090 _M_word = __words;
00091 _M_word_size = __rhs._M_word_size;
00092
00093 this->
flags(__rhs.
flags());
00094 this->
width(__rhs.
width());
00095 this->
precision(__rhs.
precision());
00096 this->
tie(__rhs.
tie());
00097 this->
fill(__rhs.
fill());
00098 _M_ios_locale = __rhs.
getloc();
00099 _M_cache_locale(_M_ios_locale);
00100
00101 _M_call_callbacks(copyfmt_event);
00102
00103
00104 this->
exceptions(__rhs.
exceptions());
00105 }
00106
return *
this;
00107 }
00108
00109
template<
typename _CharT,
typename _Traits>
00110
char
00111 basic_ios<_CharT, _Traits>::narrow(
char_type __c,
char __dfault)
const
00112
{
return __check_facet(_M_ctype).narrow(__c, __dfault); }
00113
00114
template<
typename _CharT,
typename _Traits>
00115 _CharT
00116 basic_ios<_CharT, _Traits>::widen(
char __c)
const
00117
{
return __check_facet(_M_ctype).widen(__c); }
00118
00119
00120
template<
typename _CharT,
typename _Traits>
00121
locale
00122 basic_ios<_CharT, _Traits>::imbue(
const locale& __loc)
00123 {
00124
locale __old(this->getloc());
00125 ios_base::imbue(__loc);
00126 _M_cache_locale(__loc);
00127
if (this->
rdbuf() != 0)
00128 this->
rdbuf()->pubimbue(__loc);
00129
return __old;
00130 }
00131
00132
template<
typename _CharT,
typename _Traits>
00133
void
00134 basic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
00135 {
00136
00137 ios_base::_M_init();
00138
00139
00140 _M_cache_locale(_M_ios_locale);
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154 _M_fill = _CharT();
00155 _M_fill_init =
false;
00156
00157 _M_tie = 0;
00158 _M_exception = goodbit;
00159 _M_streambuf = __sb;
00160 _M_streambuf_state = __sb ? goodbit : badbit;
00161 }
00162
00163
template<
typename _CharT,
typename _Traits>
00164
void
00165
basic_ios<_CharT, _Traits>::_M_cache_locale(
const locale& __loc)
00166 {
00167
if (__builtin_expect(has_facet<__ctype_type>(__loc),
true))
00168 _M_ctype = &use_facet<__ctype_type>(__loc);
00169
else
00170 _M_ctype = 0;
00171
00172
if (__builtin_expect(has_facet<__num_put_type>(__loc),
true))
00173 _M_num_put = &use_facet<__num_put_type>(__loc);
00174
else
00175 _M_num_put = 0;
00176
00177
if (__builtin_expect(has_facet<__num_get_type>(__loc),
true))
00178 _M_num_get = &use_facet<__num_get_type>(__loc);
00179
else
00180 _M_num_get = 0;
00181 }
00182
00183
00184
00185
00186
#if _GLIBCXX_EXTERN_TEMPLATE
00187
extern template class basic_ios<char>;
00188
00189
#ifdef _GLIBCXX_USE_WCHAR_T
00190
extern template class basic_ios<wchar_t>;
00191
#endif
00192
#endif
00193
}
00194
00195
#endif