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