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