19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/*
29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc.
49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999
69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev
79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed
99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk.
109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted
129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies.
139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted,
149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was
159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice.
169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *
179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */
189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_IOS_C
199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_IOS_C
209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_IOS_H
229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ios.h>
239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_STREAMBUF
269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_streambuf.h>
279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_NUMPUNCT_H
309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_numpunct.h>
319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif
329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE
349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// basic_ios<>'s non-inline member functions
369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Public constructor, taking a streambuf.
389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>
409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ::basic_ios(basic_streambuf<_CharT, _Traits>* __streambuf)
41e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    : ios_base(), _M_cached_ctype(0),
429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_fill(_STLP_NULL_CHAR_INIT(_CharT)), _M_streambuf(0), _M_tied_ostream(0) {
439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_ios<_CharT, _Traits>::init(__streambuf);
449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_streambuf<_CharT, _Traits>*
489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>::rdbuf(basic_streambuf<_CharT, _Traits>* __buf) {
499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  basic_streambuf<_CharT, _Traits>* __tmp = _M_streambuf;
509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _M_streambuf = __buf;
519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->clear();
529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __tmp;
539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>&
579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>::copyfmt(const basic_ios<_CharT, _Traits>& __x) {
589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _M_invoke_callbacks(erase_event);
599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _M_copy_state(__x);           // Inherited from ios_base.
60e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott  _M_cached_ctype = __x._M_cached_ctype;
619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _M_fill = __x._M_fill;
629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _M_tied_ostream = __x._M_tied_ostream;
639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _M_invoke_callbacks(copyfmt_event);
649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->_M_set_exception_mask(__x.exceptions());
659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return *this;
669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocklocale basic_ios<_CharT, _Traits>::imbue(const locale& __loc) {
709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  locale __tmp = ios_base::imbue(__loc);
719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_TRY {
729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    if (_M_streambuf)
739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block      _M_streambuf->pubimbue(__loc);
749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    // no throwing here
76e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott    _M_cached_ctype = &use_facet<ctype<char_type> >(__loc);
779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  _STLP_CATCH_ALL {
799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    __tmp = ios_base::imbue(__tmp);
809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_handle_exception(ios_base::failbit);
819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  }
829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  return __tmp;
839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Protected constructor and initialization functions. The default
869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// constructor creates an uninitialized basic_ios, and init() initializes
879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// all of the members to the values in Table 89 of the C++ standard.
889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>::basic_ios()
919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  : ios_base(),
929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _M_fill(_STLP_NULL_CHAR_INIT(_CharT)), _M_streambuf(0), _M_tied_ostream(0)
939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{}
949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid
979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>::init(basic_streambuf<_CharT, _Traits>* __sb)
989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->rdbuf(__sb);
1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->imbue(locale());
1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->tie(0);
1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->_M_set_exception_mask(ios_base::goodbit);
1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->_M_clear_nothrow(__sb != 0 ? ios_base::goodbit : ios_base::badbit);
1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ios_base::flags(ios_base::skipws | ios_base::dec);
1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ios_base::width(0);
1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  ios_base::precision(6);
1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->fill(widen(' '));
1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // We don't need to worry about any of the three arrays: they are
1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  // initialized correctly in ios_base's constructor.
1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This is never called except from within a catch clause.
1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits>
1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid basic_ios<_CharT, _Traits>::_M_handle_exception(ios_base::iostate __flag)
1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{
1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  this->_M_setstate_nothrow(__flag);
1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block  if (this->_M_get_exception_mask() & __flag)
1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block    _STLP_RETHROW;
1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}
1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE
1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_IOS_C */
1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block
1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables:
1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++
1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End:
128