/home/ntakagi/work/STLport-5.1.5/stlport/stl/_ios.h

Go to the documentation of this file.
00001 /*
00002  * Copyright (c) 1999
00003  * Silicon Graphics Computer Systems, Inc.
00004  *
00005  * Copyright (c) 1999
00006  * Boris Fomitchev
00007  *
00008  * This material is provided "as is", with absolutely no warranty expressed
00009  * or implied. Any use is at your own risk.
00010  *
00011  * Permission to use or copy this software for any purpose is hereby granted
00012  * without fee, provided the above notices are retained on all copies.
00013  * Permission to modify the code and to distribute modified code is granted,
00014  * provided the above notices are retained, and a notice that the code was
00015  * modified is included with the above copyright notice.
00016  *
00017  */
00018 #ifndef _STLP_INTERNAL_IOS_H
00019 #define _STLP_INTERNAL_IOS_H
00020 
00021 
00022 #ifndef _STLP_IOS_BASE_H
00023 # include <stl/_ios_base.h>
00024 #endif
00025 
00026 #ifndef _STLP_INTERNAL_CTYPE_H
00027 # include <stl/_ctype.h>
00028 #endif
00029 #ifndef _STLP_INTERNAL_NUMPUNCT_H
00030 # include <stl/_numpunct.h>
00031 #endif
00032 
00033 _STLP_BEGIN_NAMESPACE
00034 
00035 // ----------------------------------------------------------------------
00036 
00037 // Class basic_ios, a subclass of ios_base.  The only important difference
00038 // between the two is that basic_ios is a class template, parameterized
00039 // by the character type.  ios_base exists to factor out all of the
00040 // common properties that don't depend on the character type.
00041 
00042 // The second template parameter, _Traits, defaults to char_traits<_CharT>.
00043 // The default is declared in header <iosfwd>, and it isn't declared here
00044 // because C++ language rules do not allow it to be declared twice.
00045 
00046 template <class _CharT, class _Traits>
00047 class basic_ios : public ios_base {
00048   friend class ios_base;
00049 public:                         // Synonyms for types.
00050   typedef _CharT                     char_type;
00051   typedef typename _Traits::int_type int_type;
00052   typedef typename _Traits::pos_type pos_type;
00053   typedef typename _Traits::off_type off_type;
00054   typedef _Traits                    traits_type;
00055 
00056 public:                         // Constructor, destructor.
00057   explicit basic_ios(basic_streambuf<_CharT, _Traits>* __streambuf);
00058   virtual ~basic_ios() {}
00059 
00060 public:                         // Members from clause 27.4.4.2
00061   basic_ostream<_CharT, _Traits>* tie() const {
00062     return _M_tied_ostream;
00063   }
00064   basic_ostream<_CharT, _Traits>*
00065   tie(basic_ostream<char_type, traits_type>* __new_tied_ostream) {
00066     basic_ostream<char_type, traits_type>* __tmp = _M_tied_ostream;
00067     _M_tied_ostream = __new_tied_ostream;
00068     return __tmp;
00069   }
00070 
00071   basic_streambuf<_CharT, _Traits>* rdbuf() const
00072     { return _M_streambuf; }
00073 
00074   basic_streambuf<_CharT, _Traits>*
00075   rdbuf(basic_streambuf<char_type, traits_type>*);
00076 
00077   // Copies __x's state to *this.
00078   basic_ios<_CharT, _Traits>& copyfmt(const basic_ios<_CharT, _Traits>& __x);
00079 
00080   char_type fill() const { return _M_fill; }
00081   char_type fill(char_type __fill) {
00082     char_type __tmp(_M_fill);
00083     _M_fill = __fill;
00084     return __tmp;
00085   }
00086 
00087 public:                         // Members from 27.4.4.3.  These four functions
00088                                 // can almost be defined in ios_base.
00089 
00090   void clear(iostate __state = goodbit) {
00091     _M_clear_nothrow(this->rdbuf() ? __state : iostate(__state|ios_base::badbit));
00092     _M_check_exception_mask();
00093   }
00094   void setstate(iostate __state) { this->clear(rdstate() | __state); }
00095 
00096   iostate exceptions() const { return this->_M_get_exception_mask(); }
00097   void exceptions(iostate __mask) {
00098     this->_M_set_exception_mask(__mask);
00099     this->clear(this->rdstate());
00100   }
00101 
00102 public:                         // Locale-related member functions.
00103   locale imbue(const locale&);
00104 
00105   inline char narrow(_CharT, char) const ;
00106   inline _CharT widen(char) const;
00107 
00108   // Helper function that makes testing for EOF more convenient.
00109   static bool _STLP_CALL _S_eof(int_type __c) {
00110     const int_type __eof = _Traits::eof();
00111     return _Traits::eq_int_type(__c, __eof);
00112   }
00113 
00114 protected:
00115   basic_ios();
00116 
00117   void init(basic_streambuf<_CharT, _Traits>* __streambuf);
00118 
00119 public:
00120 
00121   // Helper function used in istream and ostream.  It is called only from
00122   // a catch clause.
00123   void _M_handle_exception(ios_base::iostate __flag);
00124 
00125 private:                        // Data members
00126   char_type _M_fill;            // The fill character, used for padding.
00127 
00128   basic_streambuf<_CharT, _Traits>* _M_streambuf;
00129   basic_ostream<_CharT, _Traits>*   _M_tied_ostream;
00130 
00131 };
00132 
00133 
00134 template <class _CharT, class _Traits>
00135 inline char
00136 basic_ios<_CharT, _Traits>::narrow(_CharT __c, char __default) const
00137 { return __STATIC_CAST(const ctype<_CharT>*, this->_M_ctype_facet())->narrow(__c, __default); }
00138 
00139 template <class _CharT, class _Traits>
00140 inline _CharT
00141 basic_ios<_CharT, _Traits>::widen(char __c) const
00142 { return __STATIC_CAST(const ctype<_CharT>*, this->_M_ctype_facet())->widen(__c); }
00143 
00144 # if !defined (_STLP_NO_METHOD_SPECIALIZATION)
00145 _STLP_TEMPLATE_NULL
00146 inline char
00147 basic_ios<char, char_traits<char> >::narrow(char __c, char) const
00148 {
00149   return __c;
00150 }
00151 
00152 _STLP_TEMPLATE_NULL
00153 inline char
00154 basic_ios<char, char_traits<char> >::widen(char __c) const
00155 {
00156   return __c;
00157 }
00158 # endif /* _STLP_NO_METHOD_SPECIALIZATION */
00159 
00160 # if defined (_STLP_USE_TEMPLATE_EXPORT)
00161 _STLP_EXPORT_TEMPLATE_CLASS basic_ios<char, char_traits<char> >;
00162 #  if ! defined (_STLP_NO_WCHAR_T)
00163 _STLP_EXPORT_TEMPLATE_CLASS basic_ios<wchar_t, char_traits<wchar_t> >;
00164 #  endif
00165 # endif /* _STLP_USE_TEMPLATE_EXPORT */
00166 
00167 _STLP_END_NAMESPACE
00168 
00169 #if defined (_STLP_EXPOSE_STREAM_IMPLEMENTATION) && !defined (_STLP_LINK_TIME_INSTANTIATION)
00170 #  include <stl/_ios.c>
00171 #endif
00172 
00173 #endif /* _STLP_IOS */
00174 
00175 // Local Variables:
00176 // mode:C++
00177 // End:
00178 



Generated on Mon Mar 10 15:32:25 2008 by  doxygen 1.5.1