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