home *** CD-ROM | disk | FTP | other *** search
/ H4CK3R 14 / hacker14.iso / programacao / cwin / c.exe / $INSTDIR / include / c++ / bits / basic_ios.h next >
Encoding:
C/C++ Source or Header  |  2003-12-15  |  5.5 KB  |  211 lines

  1. // Iostreams base classes -*- C++ -*-
  2.  
  3. // Copyright (C) 1997, 1998, 1999, 2001, 2002 Free Software Foundation, Inc.
  4. //
  5. // This file is part of the GNU ISO C++ Library.  This library is free
  6. // software; you can redistribute it and/or modify it under the
  7. // terms of the GNU General Public License as published by the
  8. // Free Software Foundation; either version 2, or (at your option)
  9. // any later version.
  10.  
  11. // This library is distributed in the hope that it will be useful,
  12. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. // GNU General Public License for more details.
  15.  
  16. // You should have received a copy of the GNU General Public License along
  17. // with this library; see the file COPYING.  If not, write to the Free
  18. // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
  19. // USA.
  20.  
  21. // As a special exception, you may use this file as part of a free software
  22. // library without restriction.  Specifically, if other files instantiate
  23. // templates or use macros or inline functions from this file, or you compile
  24. // this file and link it with other files to produce an executable, this
  25. // file does not by itself cause the resulting executable to be covered by
  26. // the GNU General Public License.  This exception does not however
  27. // invalidate any other reasons why the executable file might be covered by
  28. // the GNU General Public License.
  29.  
  30. /** @file basic_ios.h
  31.  *  This is an internal header file, included by other library headers.
  32.  *  You should not attempt to use it directly.
  33.  */
  34.  
  35. #ifndef _CPP_BITS_BASICIOS_H
  36. #define _CPP_BITS_BASICIOS_H 1
  37.  
  38. #pragma GCC system_header
  39.  
  40. #include <bits/streambuf_iterator.h>
  41. #include <bits/locale_facets.h>
  42.  
  43. namespace std 
  44. {
  45.   // 27.4.5  Template class basic_ios
  46.   template<typename _CharT, typename _Traits>
  47.     class basic_ios : public ios_base
  48.     {
  49.     public:
  50.       // Types:
  51.       typedef _CharT                 char_type;
  52.       typedef typename _Traits::int_type     int_type;
  53.       typedef typename _Traits::pos_type     pos_type;
  54.       typedef typename _Traits::off_type     off_type;
  55.       typedef _Traits                 traits_type;
  56.  
  57.       // Non-standard Types:
  58.       typedef ctype<_CharT>                       __ctype_type;
  59.       typedef ostreambuf_iterator<_CharT, _Traits>      __ostreambuf_iter;
  60.       typedef num_put<_CharT, __ostreambuf_iter>        __numput_type;
  61.       typedef istreambuf_iterator<_CharT, _Traits>    __istreambuf_iter;
  62.       typedef num_get<_CharT, __istreambuf_iter>        __numget_type;
  63.       
  64.       // Data members:
  65.     protected:
  66.       basic_ostream<_CharT, _Traits>*     _M_tie;
  67.       mutable char_type         _M_fill;
  68.       mutable bool            _M_fill_init;
  69.       basic_streambuf<_CharT, _Traits>* _M_streambuf;
  70.  
  71.       // Cached use_facet<ctype>, which is based on the current locale info.
  72.       const __ctype_type*        _M_fctype;      
  73.       // From ostream.
  74.       const __numput_type*         _M_fnumput;
  75.       // From istream.
  76.       const __numget_type*         _M_fnumget;
  77.  
  78.     public:
  79.       operator void*() const 
  80.       { return this->fail() ? 0 : const_cast<basic_ios*>(this); }
  81.  
  82.       bool 
  83.       operator!() const 
  84.       { return this->fail(); }
  85.  
  86.       iostate 
  87.       rdstate() const 
  88.       { return _M_streambuf_state; }
  89.  
  90.       void 
  91.       clear(iostate __state = goodbit);
  92.  
  93.       void 
  94.       setstate(iostate __state) 
  95.       { this->clear(this->rdstate() | __state); }
  96.  
  97.       bool 
  98.       good() const 
  99.       { return this->rdstate() == 0; }
  100.  
  101.       bool 
  102.       eof() const 
  103.       { return (this->rdstate() & eofbit) != 0; }
  104.  
  105.       bool 
  106.       fail() const 
  107.       { return (this->rdstate() & (badbit | failbit)) != 0; }
  108.  
  109.       bool 
  110.       bad() const 
  111.       { return (this->rdstate() & badbit) != 0; }
  112.  
  113.       iostate 
  114.       exceptions() const 
  115.       { return _M_exception; }
  116.  
  117.       void 
  118.       exceptions(iostate __except) 
  119.       { 
  120.     _M_exception = __except; 
  121.     this->clear(_M_streambuf_state); 
  122.       }
  123.  
  124.       // Constructor/destructor:
  125.       explicit 
  126.       basic_ios(basic_streambuf<_CharT, _Traits>* __sb) : ios_base() 
  127.       { this->init(__sb); }
  128.  
  129.       virtual 
  130.       ~basic_ios() { }
  131.       
  132.       // Members:
  133.       basic_ostream<_CharT, _Traits>*
  134.       tie() const      
  135.       { return _M_tie; }
  136.  
  137.       basic_ostream<_CharT, _Traits>*
  138.       tie(basic_ostream<_CharT, _Traits>* __tiestr)
  139.       {
  140.     basic_ostream<_CharT, _Traits>* __old = _M_tie;
  141.     _M_tie = __tiestr;
  142.     return __old;
  143.       }
  144.  
  145.       basic_streambuf<_CharT, _Traits>*
  146.       rdbuf() const    
  147.       { return _M_streambuf; }
  148.  
  149.       basic_streambuf<_CharT, _Traits>* 
  150.       rdbuf(basic_streambuf<_CharT, _Traits>* __sb);
  151.  
  152.       basic_ios&
  153.       copyfmt(const basic_ios& __rhs);
  154.  
  155.       char_type 
  156.       fill() const 
  157.       {
  158.     if (!_M_fill_init)
  159.       {
  160.         _M_fill = this->widen(' ');
  161.         _M_fill_init = true;
  162.       }
  163.     return _M_fill; 
  164.       }
  165.  
  166.       char_type 
  167.       fill(char_type __ch)
  168.       {
  169.     char_type __old = this->fill();
  170.     _M_fill = __ch;
  171.     return __old;
  172.       }
  173.  
  174.       // Locales:
  175.       locale 
  176.       imbue(const locale& __loc);
  177.  
  178.       char 
  179.       narrow(char_type __c, char __dfault) const;
  180.  
  181.       char_type 
  182.       widen(char __c) const;
  183.      
  184.     protected:
  185.       // 27.4.5.1  basic_ios constructors
  186.       basic_ios() : ios_base() 
  187.       { }
  188.  
  189.       void 
  190.       init(basic_streambuf<_CharT, _Traits>* __sb);
  191.  
  192.       bool
  193.       _M_check_facet(const locale::facet* __f) const
  194.       {
  195.     if (!__f)
  196.       __throw_bad_cast();
  197.     return true;
  198.       }
  199.  
  200.       void
  201.       _M_cache_facets(const locale& __loc);
  202.     };
  203. } // namespace std
  204.  
  205. #ifdef _GLIBCPP_NO_TEMPLATE_EXPORT
  206. # define export
  207. #include <bits/basic_ios.tcc>
  208. #endif
  209.  
  210. #endif /* _CPP_BITS_BASICIOS_H */
  211.