|
|
1.1 root 1:
2: cycle 16
3:
4: 5/3/89: Fix ws manipulator so that it will flushed tied ostream
5: when required.
6:
7: 5/2/89: More cleanup of open_mode arguments. Add defaults for
8: ifstream::open and ofstream::open. Change all
9: defaults to filebuf::openprot
10:
11: cycle 15
12:
13: 4/28/89. Add default open_mode arguments to ifstream and ofstream
14: constructors.
15:
16: cycle 14?
17:
18: 4/18/89. Fix bug is filebuf::seekoff that also caused problems
19: for tellg and tellp.
20:
21: 4/13/89. Change cstreams.c so it doesn't refer to skip (which is
22: a stream compatibility function.
23:
24: ------------------------------------------------
25: Cycle 13
26:
27: Change typedef in strstream.c to avoid use of size_t. (This is
28: because of header file compatibility problems.)
29:
30: Change exit(10) to abort() in oldformat.c.
31:
32: Cycle 12
33:
34: Put in include of <iostream.h> in strstream.h
35:
36: Change istream::get() so that it really gets expanded inline.
37: Previous definition was being outlined.
38:
39: Reorder declarations so that ipfx comes before any operator>>. Not
40: just before the ones that have inline code refering to it. The old
41: ordering was resulting in a failure to expand ipfx where it should
42: have been.
43:
44: Move declaration of ios_user_union higher in stream.c in order to
45: eliminate a new warning message.
46:
47: Change values of O_CREAT O_TRUNC O_EXCL in cases where headers don't
48: define them (the only known such system is V9)
49:
50: Fix ostream::out_waiting. It was just returning non-zero when there was stuff
51: accumulated but not consumed. It was supposed to return the number
52: (at least according to the man page.)
53:
54: -----------------------------------------------------
55: Cycle 11
56:
57: Change cstreams.c for change to way explicit placement works.
58:
59: Implement bidirectional strstream.
60:
61: ----------------------------------------------------
62: Cycle 9
63:
64: Fix bug in void* inserter. (Showbase should have been set
65: but wasn't)
66:
67:
68: --------------------------------------------------
69: Cycle 8
70:
71: streambuf::snextc was not incrementing the get pointer before
72: it called underflow. This had no effect because the streambuf
73: classes assume that when underflow is called there
74: was nothing in the buffer. The man page said that although this
75: was "normally the case" but doesn't guarantee it. I wrote a new
76: streambuf class that checked for the condition and it failed.
77: I've fixed snextc.
78:
79: ---------------------------------------------------
80: Cycle 7
81:
82: Fix bug in setstate.
83:
84: Change return type of filebuf::close to filebuf*
85:
86: Add noreplace to open_mode
87:
88: Fixed bug in adjustment of floating fields
89:
90: -----------------------------------------------------
91:
92: Cycle 6.1
93:
94: Interpretation of justification fields was screwed up.
95:
96: Fix for whitespace eating of character extractor of cycle 6 was
97: incomplete. (It might read characters when the stream was
98: in error status).
99:
100: -----------------------------------------------------
101: Cycle 6
102:
103: Make streambuf::xsgetn and streambuf::xsputn virtuals
104:
105: ios::operator int changed to ios::operator void* in order to allow
106: detection of "cin << 5" without requiring any extractor or inserter
107: to be declared in class iostream.
108:
109: sync is moved from ios to istream, the corresponding action on
110: ostreams is flushing.
111:
112: Reorder declarations in iostream.h to avoid forward enum tag
113: declarations.
114:
115: Fixes to single character extractors to make sure they skip
116: whitespace when required.
117:
118: Massive simplification of format control stuff
119:
120: struct fmtinfo goes away as do pushing and popping of it.
121:
122: several format state variables are consolodated into
123: a single flag field and new flags are added to control
124: more stuff. Remaining state variables are fill, precision and
125: width. New statevariable "flags".
126:
127: Flags declared in an enum within ios:
128:
129: enum { skipws=01,
130: /* skip whitespace on input */
131: left=02, right=04, internal=010,
132: /* padding location */
133: dec=020, oct=040, hex=0100,
134: /* conversion base */
135: showbase=0200, showpoint=0400, uppercase=01000,
136: showpos=02000,
137: /* modifiers */
138: scientific=04000, fixed=010000
139: /* floating point notation */ } ;
140:
141: Functions to manipulate the flag field
142: s.flags() return current flag
143: s.flags(b) sets flags to b
144: s.setf(b) turns on bits marked in f in flags
145: s.setf(b,f) assigns b to "field" specified by f
146: (i.e. bits that are on in f)
147:
148: static ios int members for convienent reference to fields
149: ios::basefield = hex|dec|oct ;
150: ios::adjustfield = left|right|internal ;
151: ios::floatfield = scientific|fixed ;
152:
153: New manipulators
154:
155: s << setfill(f) sets fill state variable
156: s << setprecision(p) sets precision state variable
157: s << setiosflags(b) does s.setf(b)
158: s << resetiosflags(b) does s.setf(0,b)
159:
160: New user setable state variables
161:
162: flags are a long user code may use unassigned bits
163: s.iword(x) returns a long&
164: s.pword(s) returns a void*& (sharing space with s.iword(x)
165:
166:
167: ios::bitalloc() returns a previously unallocated bit
168: ios::xalloc() returns a previously unused index
169:
170: ---------------------------------------------
171: Cycle 5
172:
173: Eliminated a lot of warnings about assigning longs to ints and
174: the like.
175:
176: Put in some overflow detection on integer input (it is still very
177: incomplete).
178:
179: Change sync_with_stdio into a static member function
180:
181: Add enum_mode, nocreate. Causes failure of an open if file does not
182: previously exist.
183:
184: Changed popfmt to reset width to 0. This is more consistent with the
185: normal use.
186:
187: Fixed some bugs in interaction of EOF eating whitespace and "ignore"
188:
189: ------------------------------------------
190:
191: Multiple Inheritance Version.
192:
193: Changes from previous version:
194:
195: MI structure in classes. Mainly this is a lot of trivial changes.
196: But one substantive change arises. Because ios is now inherited
197: as a virtual base class, a constructor with no arguments must
198: be used. Therefore ios::init(streambuf*) is declared protected and
199: must be used to initialize in derived classes.
200:
201: -------------------------------------------
202:
203: The latest version of the iostream package incorporates a large
204: number of changes and bug fixes. They are listed here in my
205: estimation of their importance.
206:
207: In principle, istream, ostream, and iostream are now distinct
208: classes. istream only contains input operations and ostream only
209: contains output operations. iostream is the "join" of the two. There
210: is a new class ios containing the common state information from which
211: all these are derived.
212:
213: This means, for example, that cin should't be passed to a function
214: expecting an iostream.
215:
216: In practice to do this would have required a good implementation of
217: multiple inheritance with virtual base classes. To avoid relying on
218: this feature of C++ all the stream classes are typedefed to ios.
219:
220: As a consequence of this change several classes derived from
221: "istream" and "ostream" have been added. Namely ifstream, ofstream,
222: istrstream and ostrstream. These (rather than the bidrectional
223: fstream and strstream) should be used when a stream for only input or
224: only output is desired.
225:
226: The kludge that used #defines and pointer variables to implement cin,
227: cour, cerr and cdebug has been eliminated. The standard streams are
228: now declared as extern variables in iostream.h. Their types are
229: classes derived from iostream with an assignment operator. So that it
230: is now permitted to assign streams to them.
231:
232: Because cfront now distinguishes int from char in overload resolution
233: cout << 'a' now outputs the character 'a' rather than the decimal
234: value. This is an incompatibility with the old stream package, but
235: is such a large improvement that I thought it was worth any
236: conversion problems it might cause. This made the manipulator
237: "onec" redundant and it has been removed.
238:
239: The name space has been cleaned up. A lot of identifiers that were
240: previously part of the global name space have been made local to a
241: class. A table of the old and new names follows. Probably the most
242: important is the renaming of open_modes.
243:
244: old name new name
245: -------- --------
246:
247: iocdebug // eliminated
248: iocerr // eliminated
249: iocin // eliminated
250: iocout // eliminated
251:
252: cdebug clog // Renamed because of
253: // complaints about old name
254:
255: state_value io_state
256: // Renamed because state_value
257: // was too unspecific
258:
259: _bad ios::badbit
260: _eof ios::eofbit
261: _fail ios::failbit
262: _good ios::goodbit
263:
264: append ios::app
265: atend ios::ate
266: input ios::in
267: output ios::out
268:
269: seek_beg ios::beg
270: seek_cur ios::cur
271: seek_end ios::end
272:
273: stream.h contains declarations of the names required for backward
274: compatibility with the stream package.
275:
276: The macros for declaring manipulator classes (IOMANIP and IOMANIP2)
277: have been replaced by a collection of macros that are more
278: "template-like". Two argument manipulators are not implemented.
279: (Users may follow the pattern in iomanip.h to implement them
280: themselves.)
281:
282: filebuf and fstream operations no longer clear errno.
283:
284: The virtual declaration of streambuf::setbuf now only has two
285: arguments. The three argument form exists in streambuf for
286: compatibility with the stream package, but the "official"
287: definition has only two arguments. Similarly the documented
288: constructor is now streambuf(char*,int).
289:
290: The members of fstream (ifstream and ofstream) that used to return an
291: int as an error indication (namely open, attach, close) now return
292: void. Errors are indicated by setting failbit in the error state.
293: There was some confusion here about whether an error was indicated by
294: returning 0 or EOF. Declaraing these functions to return void
295: eliminates the possibility of confusion.
296:
297: strstreambuf now allows setbuf in order to control sizes of
298: allocation in dynamic mode. (When character strings are being
299: automatically extended.)
300:
301: More careful checks for whether flushes are required on streams that
302: are tied to other streams. (E.g. flushes on cout when characters are
303: extracted from cin.)
304:
305: Tieing now works for insertion. E.g. cerr is tied to cout, so
306: insertion into cerr causes cout to be flushed.
307:
308: Redundant calls to allocate have been removed from streambuf::xsgetn
309: and streambuf::xsputn. (This means that the only calls to
310: streambuf::allocate from streambuf member functions are from the
311: virtuals that may be overriden in derived classes.)
312:
313: open with ios::ate (the old atend) no longer implies ios::out (the
314: old output). ios::app does. (ate is a perfectly sensible mode
315: for input.)
316:
317: eatwhite is defined for compatibility with stream package.
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.