source: trunk/src/gcc/libstdc++-v3/include/bits/basic_ios.h@ 2

Last change on this file since 2 was 2, checked in by bird, 23 years ago

Initial revision

  • Property cvs2svn:cvs-rev set to 1.1
  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 5.5 KB
Line 
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
43namespace 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 */
Note: See TracBrowser for help on using the repository browser.