|
|
1.1 root 1: . \"ident "%W%"
2: . \"Copyright (c) 1984 AT&T
3: . \"All Rights Reserved
4: . \"THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T
5: . \"The copyright notice above does not evidence any
6: . \"actual or intended publication of such source code.
7: .TH IOSTREAM 3I+ "C++ Stream Library" " "
8: .SH NAME
9: ios \- input/output formatting
10: .SH SYNOPSIS
11: .nf
12: .ta1i 2i
13: .ft B
14: #include <iostream.h>
15:
16: struct fmtinfo {
17: ostream* tie;
18: short convbase;
19: short width;
20: short precision;
21: char fill;
22: char ladjust;
23: char showbase;
24: char skip;
25: char floatfmt;
26: };
27:
28: class ios {
29: public:
30: enum io_state { goodbit=0, eofbit, failbit, badbit };
31: enum open_mode { in, out, ate, app };
32: enum seek_dir { beg, cur, end };
33: public:
34: ios(streambuf* b);
35:
36: int bad();
37: void clear(state_value i = _good);
38: int convbase();
39: void convbase(int i);
40: int eof();
41: int fail();
42: char fill();
43: void fill(char c);
44: char floatfmt();
45: void floatfmt(char c);
46: fmtinfo fmt();
47: void fmt(fmtinfo& info);
48: int ladjust();
49: void ladjust(int a);
50: int good();
51: int operator!();
52: operator int();
53: int popfmt();
54: int precision();
55: void precision(int i);
56: void pushfmt();
57: streambuf* rdbuf();
58: int rdstate();
59: int showbase();
60: void showbase(int i);
61: int skip();
62: int skip(int i);
63: void sync_with_stdio();
64: streampos tellg();
65: ostream* tie();
66: ostream* tie(ostream* iosp);
67: int width();
68: void width(int i);
69:
70: ios& operator<<(ios& (*)(ios&));
71: ios& operator>>(ios& (*)(ios&));
72: private:
73: iostream(iostream&) ;
74: iostream& operator=(iostream&) ;
75: };
76:
77: class ios_withassign : ios {
78: ios_withassign();
79: ios& operator=(ios&);
80: ios& operator=(streambuf*);
81: } ;
82:
83: ios& dec(ios& i) ;
84: ios& hex(ios& i) ;
85: ios& oct(ios& i) ;
86: ios& popfmt(ios& i) ;
87: ios& pushfmt(ios& i) ;
88: .fi
89: .ft R
90: .SH DESCRIPTION
91: The stream classes derived from \f(CWios\fRs
92: provide a high level interface that
93: supports transferring
94: formatted and unformatted information into and out of
95: \f(CWstreambuf\fRs.
96: .PP
97: In the following assume:
98: .br
99: \(em \fBs\fR is an \f(CWios\fR.
100: .br
101: \(em \fBswa\fR is an \f(CWios_withassign\fR.
102: .br
103: \(em \fBsp\fR is a \f(CWios*\fR.
104: .br
105: \(em \fBi\fR and \fBn\fR are \f(CWint\fR.
106: .br
107: \(em \fBc\fR is a \f(CWchar\fR.
108: .br
109: \(em \fBosp\fR is an \f(CWostream*\fR.
110: .br
111: \(em \fBsb\fR is a \f(CWstreambuf*\fR.
112: .br
113: \(em \fBpos\fR is a \f(CWstreampos\fR.
114: .br
115: \(em \fBoff\fR is a \f(CWstreamoff\fR.
116: .br
117: \(em \fBinfo\fR is a \f(CWformatinfo\fR.
118: .br
119: \(em \fBdir\fR is a \f(CWseek_dir\fR.
120: .br
121: \(em \fBmode\fR is a \f(CWseek_dir\fR.
122: .br
123: \(em \fBfct\fR is a function with type \f(CWios& (*)(ios&)\fR.
124: .PP
125: Constructors and assignment:
126: .TP
127: \fBios(sb)\fR
128: \fBsb\fR becomes the \f(CWstreambuf\fR associated with the
129: constructed \fBios\fR. This association is fixed for
130: the life of the \f(CWios\fR. If \fBsb\fR is null the effect is
131: undefined.
132: .TP
133: \fBios_withassign()\fR
134: Uninitialized variable.
135: .sp
136: .nf
137: .in -.5i
138: \fBios(ios&)\fR
139: \fBios=ios\fR
140: .in
141: .fi
142: Copying of \f(CWios\fR's is not in general
143: well defined and the constructor and assignment operators
144: are made private so that the compiler will complain about attempts to
145: do so. Usually what is desired
146: is copying of pointers to \f(CWiostream\fRs.
147: .TP
148: swa=sb
149: Associates \fBsb\fR with \fBswa\fR and initializes the entire
150: state of
151: \fBswa\fR.
152: .TP
153: swa=s
154: Associates \fBs->rdbuf()\fR with \fBswa\fR and
155: initializes the entire state of
156: \fBswa\fR.
157: .PP
158: An \fBios\fR has an internal error state (which is a collection
159: of the bits declared as \f(CWio_state\fRs). Members related
160: to the error state:
161: .RS
162: .TP
163: \fBi=s.rdstate()\fR
164: Returns the current error state.
165: .TP
166: \fBs.clear(i)\fR
167: Stores \fBi\fR as the error state. If \fBi\fR is zero
168: this clears all bits. To set a bit without clearing previously
169: set bits requires something like \fBs.clear(badbit|s.rdstate())\fR.
170: .TP
171: \fBi=s\fR
172: The \f(CWint\fR conversion operator is non-zero if \f(CWbadbit\fR or
173: \f(CWfailbit\fR is set in the error state.
174: .TP
175: \fBi=s.good()\fR
176: Non-zero if the error state has no bits set.
177: .TP
178: \fBi=s.eof()\fR
179: Non-zero if \f(CWeofbit\fR is set in the error state. Normally this
180: bit is set when an end of file has been encountered doing extraction.
181: .TP
182: \fBi=s.fail()\fR
183: Non-zero if either \f(CWbadbit\fR or \f(CWfailbit\fR are set in the
184: error state. Normally this indicates that some operation has failed.
185: .TP
186: \fBi=s.bad()\fR
187: Non-zero if \fBbadbit\fR is set in the error state.
188: Normally this indicates
189: that some operation on \fBs.rdbuf()\fR has failed.
190: .RE
191: .PP
192: An \f(CWios\fR has a collection of format state variables
193: that are used by input and output operations to control the
194: details of formatting operations. Otherwise their values
195: have no particular effect and they may be set and examined arbitrarily
196: by user code.
197: .RS
198: .TP
199: \fBs.convbase(i)\fR
200: Sets the "conversion base" format state variable to \fBi\fR.
201: .TP
202: \fBi=s.convbase()\fR
203: Returns the "conversion base" format state variable.
204: .TP
205: \fBs.fill(c)\fR
206: Sets the "fill character" format state variable to \fBc\fR.
207: .TP
208: \fBc=s.fill()\fR
209: Returns the "fill character" format state variable.
210: .TP
211: \fBs.fill(c)\fR
212: Sets the "fill character" format state variable to \fBc\fR.
213: .TP
214: \fBc=s.fill()\fR
215: Returns the "fill character" format state variable.
216: .TP
217: \fBs.floatfmt(c)\fR
218: Sets the "floating format" format state variable to \fBc\fR.
219: .TP
220: \fBc=s.floatfmt()\fR
221: Returns the "floating format" format state variable.
222: .TP
223: \fBs.ladjust(i)\fR
224: Sets the "left adjustment" format state variable to \fBi\fR.
225: .TP
226: \fBi=s.ladjust()\fR
227: Returns the "left adjustment" format state variable.
228: .TP
229: \fBs.precision(i)\fR
230: Sets the "precision" format state variable to \fBi\fR.
231: .TP
232: \fBi=s.precision()\fR
233: Returns the "precision" format state variable.
234: .TP
235: \fBs.showbase(i)\fR
236: Sets the "show explicit base" format state variable to \fBi\fR.
237: .TP
238: \fBi=s.showbase()\fR
239: Returns the "show explicit base" format state variable.
240: .TP
241: \fBsp=s.skip(sp)\fR
242: Sets the "skip whitespace" format state variable to \fBsp\fP.
243: .TP
244: \fBsp=s.skip()\fR
245: Returns the "skip whitespace" format state variable.
246: .TP
247: \fBosp=s.tie(osp)\fR
248: Sets the "tie" format state variable \fBsp\fP.
249: .TP
250: \fBosp=s.tie()\fR
251: Returns the "tie" format state variable.
252: .TP
253: \fBs.width(i)\fR
254: Sets the "field width" format state variable to \fBi\fP.
255: .TP
256: \fBi=s.width()\fR
257: Returns the "field width" format state variable.
258: .TP
259: \fBs.fmt(info)\fR
260: Sets the collection of all format state variables to \fBinfo\fP in
261: a single operation.
262: .TP
263: \fBinfo=s.fmt()\fR
264: Returns the collection of all format state variables in
265: a single operation.
266: .TP
267: \fBs.pushfmt()\fR
268: Pushes a \f(CWformatinfo\fR structure onto a (dynamically allocated)
269: stack associated with \fBs\fR. This copies the current
270: values of format state variables without changing them.
271: .TP
272: \fBi=s.popfmt()\fR
273: Pops the topmost \f(CWformatinfo\fR from the stack associated with
274: \fBs\fR and sets the format state variables accordingly. Normally
275: \fBi\fR is non-zero, but it will be zero if the stack is empty
276: (i.e., more \fBpopfmt\fR than \fBpushfmt\fR operations have been
277: performed.
278: .RE
279: .PP
280: Other members:
281: .TP
282: \fBsb=s.rdbuf()\fR
283: Returns a pointer to the \f(CWstreambuf\fR associated with
284: \fBs\fR when \fBs\fR was constructed.
285: .TP
286: \fB((ios*)0)->sync_with_stdio()\fR
287: Solves problems that arise when mixing stdio and
288: iostreams. The first time it is called it will reset the
289: standard iostreams (\f(CWinstream\fR, \f(CWoutstream\fR, \f(CWerrstream\fR,
290: \f(CWlogstream\fR) to be streams
291: using \f(CWstdiobuf\fRs.
292: After that input and output using these streams may
293: be mixed with input and output using the corresponding \f(CWFILE\fRs and
294: will be properly synchronized.
295: .RE
296: .PP
297: Convenient manipulators (functions that take an \f(CWios&\fR
298: and return their argument).
299: .TP
300: \fBios<<dec
301: .in -.5i
302: .br
303: .nf
304: \fBios<<dec
305: \fBios>>dec\fR
306: .fi
307: .in
308: Sets the convbase to 10.
309: .sp
310: .nf
311: .in -.5i
312: \fBios<<hex
313: \fBios>>hex\fR
314: .in
315: Sets the convbase to 16.
316: .sp
317: .nf
318: .in -.5i
319: \fBios<<oct
320: \fBios>>oct\fR
321: .fi
322: .in
323: Sets the convbase to 8.
324: .sp
325: .nf
326: .in -.5i
327: \fBios<<popfmt
328: \fBios>>popfmt\fR
329: .fi
330: .in
331: Does \fBs.popfmt()\fR
332: .in -.5i
333: .sp
334: .nf
335: \fBios<<pushfmt
336: \fBios>>pushfmt\fR
337: .fi
338: .in
339: Does \fBs.pushfmt()\fR
340: .PP
341: The \f(CWstreambuf\fR associated with an \f(CWios\fR may be manipulated
342: by other methods than through \f(CWios\fR. For example, characters may
343: be stored in a queuelike \f(CWstreambuf\fR through an \f(CWostream\fR
344: while they are being fetched through an \f(CWistream\fR.
345: Or for efficiency some
346: part of a program may choose to do \f(CWstreambuf\fR gets
347: directly rather than through the \f(CWios\fR.
348: In most cases
349: the program does not have to worry about this possibility, because
350: an \f(CWios\fR never saves information about the internal state
351: of a \f(CWstreambuf\fR. For example if the \f(CWstreambuf\fR is
352: repostitioned between extraction operations the extraction (input)
353: will proceed normally.
354: .SH CAVEATS
355: .PP
356: The effect of \fBios.sync_with_stdio()\fR
357: does not depend on \fBios\fR.
358: \fBsync_with_stdio\fR ought
359: to be a global function but it is a member of \fBiostream\fR to
360: avoid name space pollution.
361: The need for \fBsync_with_stdio\fR is a wart. The old stream
362: package did this as a default, but in the iostream package
363: unbuffered \f(CWstdiobuf\fRs are too inefficient to be the default.
364: .PP
365: The stream package had a constructor that took a \fBFILE*\fR argument.
366: This is now replaced by \f(CWstdiostream\fR.
367: It is not declared even as an obsolete form to avoid
368: having \f(CWiostream.h\fR
369: depend on \f(CWstdio.h\fR.
370: .PP
371: The old stream package allowed copying of streams. This is disallowed
372: by the iostream package. Old code using copying can usually be
373: rewritten to use pointers and copy pointers.
374: .PP
375: For compatibility with the old stream package, the versions of
376: .I tie
377: and
378: .I skip
379: that set the state variables also return the old value.
380: .SH SEE ALSO
381: IOS.INTRO(3C++)
382: streambuf(3C++)
383: istream(3C++)
384: ostream(3C++)
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.