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_INTERNAL_IOS_H 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_IOS_H 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_IOS_BASE_H 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ios_base.h> 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_CTYPE_H 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ctype.h> 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 29e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_NUMPUNCT_H 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_numpunct.h> 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// ---------------------------------------------------------------------- 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Class basic_ios, a subclass of ios_base. The only important difference 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// between the two is that basic_ios is a class template, parameterized 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// by the character type. ios_base exists to factor out all of the 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// common properties that don't depend on the character type. 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The second template parameter, _Traits, defaults to char_traits<_CharT>. 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The default is declared in header <iosfwd>, and it isn't declared here 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// because C++ language rules do not allow it to be declared twice. 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass basic_ios : public ios_base { 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block friend class ios_base; 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Synonyms for types. 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _CharT char_type; 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::int_type int_type; 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::pos_type pos_type; 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::off_type off_type; 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Traits traits_type; 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Constructor, destructor. 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit basic_ios(basic_streambuf<_CharT, _Traits>* __streambuf); 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block virtual ~basic_ios() {} 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Members from clause 27.4.4.2 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ostream<_CharT, _Traits>* tie() const { 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _M_tied_ostream; 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ostream<_CharT, _Traits>* 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block tie(basic_ostream<char_type, traits_type>* __new_tied_ostream) { 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ostream<char_type, traits_type>* __tmp = _M_tied_ostream; 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_tied_ostream = __new_tied_ostream; 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* rdbuf() const 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _M_streambuf; } 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block rdbuf(basic_streambuf<char_type, traits_type>*); 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Copies __x's state to *this. 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ios<_CharT, _Traits>& copyfmt(const basic_ios<_CharT, _Traits>& __x); 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char_type fill() const { return _M_fill; } 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char_type fill(char_type __fill) { 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char_type __tmp(_M_fill); 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_fill = __fill; 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Members from 27.4.4.3. These four functions 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // can almost be defined in ios_base. 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void clear(iostate __state = goodbit) { 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_clear_nothrow(this->rdbuf() ? __state : iostate(__state|ios_base::badbit)); 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_check_exception_mask(); 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void setstate(iostate __state) { this->clear(rdstate() | __state); } 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iostate exceptions() const { return this->_M_get_exception_mask(); } 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void exceptions(iostate __mask) { 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_set_exception_mask(__mask); 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->clear(this->rdstate()); 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: // Locale-related member functions. 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block locale imbue(const locale&); 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block inline char narrow(_CharT, char) const ; 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block inline _CharT widen(char) const; 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Helper function that makes testing for EOF more convenient. 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL _S_eof(int_type __c) { 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const int_type __eof = _Traits::eof(); 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Traits::eq_int_type(__c, __eof); 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected: 116e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Cached copy of the curent locale's ctype facet. Set by init() and imbue(). 117e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const ctype<char_type>* _M_cached_ctype; 118e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 119e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic: 120e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Equivalent to &use_facet< Facet >(getloc()), but faster. 121e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const ctype<char_type>* _M_ctype_facet() const { return _M_cached_ctype; } 122e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 123e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottprotected: 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ios(); 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void init(basic_streambuf<_CharT, _Traits>* __streambuf); 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Helper function used in istream and ostream. It is called only from 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // a catch clause. 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_handle_exception(ios_base::iostate __flag); 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: // Data members 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block char_type _M_fill; // The fill character, used for padding. 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_streambuf<_CharT, _Traits>* _M_streambuf; 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block basic_ostream<_CharT, _Traits>* _M_tied_ostream; 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline char 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>::narrow(_CharT __c, char __default) const 146e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _M_ctype_facet()->narrow(__c, __default); } 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _CharT, class _Traits> 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _CharT 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<_CharT, _Traits>::widen(char __c) const 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott{ return _M_ctype_facet()->widen(__c); } 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_NO_METHOD_SPECIALIZATION) 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline char 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<char, char_traits<char> >::narrow(char __c, char) const 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __c; 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TEMPLATE_NULL 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline char 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbasic_ios<char, char_traits<char> >::widen(char __c) const 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __c; 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* _STLP_NO_METHOD_SPECIALIZATION */ 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_USE_TEMPLATE_EXPORT) 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_ios<char, char_traits<char> >; 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if ! defined (_STLP_NO_WCHAR_T) 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_EXPORT_TEMPLATE_CLASS basic_ios<wchar_t, char_traits<wchar_t> >; 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* _STLP_USE_TEMPLATE_EXPORT */ 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION) 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_ios.c> 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_IOS */ 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 188