177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_IOS_C
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_IOS_C
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_IOS_H
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_ios.h>
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_STREAMBUF
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_streambuf.h>
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_NUMPUNCT_H
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_numpunct.h>
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// basic_ios<>'s non-inline member functions
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Public constructor, taking a streambuf.
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits>
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_ios<_CharT, _Traits>
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ::basic_ios(basic_streambuf<_CharT, _Traits>* __streambuf)
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : ios_base(), _M_cached_ctype(0),
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_fill(_STLP_NULL_CHAR_INIT(_CharT)), _M_streambuf(0), _M_tied_ostream(0) {
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_ios<_CharT, _Traits>::init(__streambuf);
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits>
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_streambuf<_CharT, _Traits>*
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __buf) {
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  basic_streambuf<_CharT, _Traits>* __tmp = _M_streambuf;
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _M_streambuf = __buf;
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->clear();
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __tmp;
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits>
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_ios<_CharT, _Traits>&
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_ios<_CharT, _Traits>::copyfmt(const basic_ios<_CharT, _Traits>& __x) {
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _M_invoke_callbacks(erase_event);
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _M_copy_state(__x);           // Inherited from ios_base.
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _M_cached_ctype = __x._M_cached_ctype;
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _M_fill = __x._M_fill;
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _M_tied_ostream = __x._M_tied_ostream;
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _M_invoke_callbacks(copyfmt_event);
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->_M_set_exception_mask(__x.exceptions());
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return *this;
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits>
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerlocale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) {
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  locale __tmp = ios_base::imbue(__loc);
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TRY {
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (_M_streambuf)
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_streambuf->pubimbue(__loc);
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    // no throwing here
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_cached_ctype = &use_facet<ctype<char_type> >(__loc);
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_CATCH_ALL {
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    __tmp = ios_base::imbue(__tmp);
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_handle_exception(ios_base::failbit);
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  return __tmp;
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Protected constructor and initialization functions. The default
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// constructor creates an uninitialized basic_ios, and init() initializes
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// all of the members to the values in Table 89 of the C++ standard.
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits>
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_ios<_CharT, _Traits>::basic_ios()
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  : ios_base(),
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_fill(_STLP_NULL_CHAR_INIT(_CharT)), _M_streambuf(0), _M_tied_ostream(0)
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{}
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits>
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbasic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->rdbuf(__sb);
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->imbue(locale());
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->tie(0);
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->_M_set_exception_mask(ios_base::goodbit);
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->_M_clear_nothrow(__sb != 0 ? ios_base::goodbit : ios_base::badbit);
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ios_base::flags(ios_base::skipws | ios_base::dec);
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ios_base::width(0);
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ios_base::precision(6);
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->fill(widen(' '));
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // We don't need to worry about any of the three arrays: they are
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  // initialized correctly in ios_base's constructor.
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// This is never called except from within a catch clause.
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _CharT, class _Traits>
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid basic_ios<_CharT, _Traits>::_M_handle_exception(ios_base::iostate __flag)
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  this->_M_setstate_nothrow(__flag);
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  if (this->_M_get_exception_mask() & __flag)
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_RETHROW;
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_IOS_C */
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
128