Annotation of researchv10dc/man/mana/istream.3, revision 1.1.1.1

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 ISTREAM  3I+ "C++ Stream Library" " "
                      8: .SH NAME
                      9: istream \- formatted and unformatted input
                     10: .SH SYNOPSIS
                     11: .nf
                     12: .ft B
                     13: .ta1i 2i
                     14: #include <iostream.h>
                     15: 
                     16: typedef long streamoff, streampos;
                     17: class ios {
                     18: public:
                     19:        enum    seek_dir { beg, cur, end };
                     20:        enum    open_mode { in, out, ate, app } ;
                     21:        // \fIand lots of other stuff ... \fP
                     22:        } ;
                     23: 
                     24: class istream : ios {
                     25: public:
                     26:        int     gcount();
                     27:        istream&        get(char* ptr, int len, char delim='\en');
                     28:        istream&        get(unsigned char* ptr,int len, char delim='\en');
                     29: 
                     30:        istream&        get(unsigned char& c);
                     31:        istream&        get(char& c);
                     32:        istream&        get(streambuf&, char delim ='\en');
                     33:        int     get();
                     34:        istream&        getline(char* ptr, int len, char delim='\en');
                     35:        istream&        getline(unsigned char* ptr, int len, char delim='\en');
                     36:        istream&        getline(streambuf& sb, int len, char delim='\en');
                     37:        istream&        ignore(int len=1,int delim=EOF);
                     38:        int     ipfx(int need=0);
                     39:        int     peek();
                     40:        istream&        putback(char c);
                     41:        istream&        read(char* s,int n); 
                     42:        istream&        read(unsigned char* s,int n);
                     43:        istream&        seekg(streampos pos);
                     44:        istream&        seekg(streamoff off, seek_dir d);
                     45:        streampos       tellg();
                     46: 
                     47:        istream&        operator>>(char*);
                     48:        istream&        operator>>(unsigned char*);
                     49:        istream&        operator>>(unsigned char&);
                     50:        istream&        operator>>(char&);
                     51:        istream&        operator>>(short&);
                     52:        istream&        operator>>(int&);
                     53:        istream&        operator>>(long&);
                     54:        istream&        operator>>(unsigned short&);
                     55:        istream&        operator>>(unsigned int&);
                     56:        istream&        operator>>(unsigned long&);
                     57:        istream&        operator>>(float&);
                     58:        istream&        operator>>(double&);
                     59:        istream&        operator>>(streambuf&);
                     60:        istream&        operator>>(istream& (*)(istream&));
                     61: };
                     62: 
                     63: class istream_withassign {
                     64:                istream_withassign();
                     65:        istream&        operator=(istream&);
                     66:        istream&        operator=(streambuf*);
                     67: };
                     68: 
                     69: extern istream_withassign cin;
                     70: 
                     71: istream&       ws(iostream& i) ;
                     72: .fi
                     73: .ft R
                     74: .SH DESCRIPTION
                     75: \f(CWistream\fRs support interpretation of characters
                     76: fetched from an associated \f(CWstreambuf\fR.
                     77: These are commonly refered to as input operations.
                     78: .PP
                     79: Assume that
                     80: .br
                     81: \(em \fBins\fR has type \f(CWistream\fR.
                     82: .br
                     83: \(em \fBinwa\fR has type \f(CWistream_withassign\fR.
                     84: .br
                     85: \(em \fBinsp\fR has type \f(CWistream*\fR.
                     86: .br
                     87: \(em \fBc\fR has type \f(CWchar&\fR
                     88: .br
                     89: \(em \fBdelim\fR has type \f(CWchar\fR.
                     90: .br
                     91: \(em \fBptr\fR has type \f(CWchar*\fR or \f(CWunsigned char*\fR.
                     92: .br
                     93: \(em \fBsb\fR has type \f(CWstreambuf&\fR.
                     94: .br
                     95: \(em \fBi\fR, \fBlen\fR, \fBd\fR, and \fBneed\fR have type \f(CWint\fR.
                     96: .br
                     97: \(em \fBpos\fR is a \f(CWstreampos\fR.
                     98: .br
                     99: \(em \fBoff\fR is a \f(CWstreamoff\fR.
                    100: .br
                    101: \(em \fBdir\fR is a \f(CWseek_dir\fR.
                    102: .br
                    103: \(em \fBmanip\fR is a function with type \f(CWistream& (*)(istream&)\fR.
                    104: .PP
                    105: Constructors and assignment:
                    106: .TP
                    107: \fBistream(sb)\fR
                    108: Initializes \fBios\fR state variables and associates stream with
                    109: buffer \fBsb\fR.
                    110: \fBistream_withassign()\fR
                    111: Does no initialization.  This allows a file static
                    112: variable of this type
                    113: (\fBcin\fR for example) to be used before it is constructed provided
                    114: it is assigned to first.
                    115: .TP
                    116: \fBinswa=sb\fR
                    117: Associates \fBsb\fR with \fBswa\fR and initializes the entire
                    118: state of \fBinswa\fR.
                    119: .TP
                    120: \fBinswa=ins\fR
                    121: Associates \fBins->rdbuf()\fR with \fBswa\fR and initializes the entire
                    122: state of \fBinswa\fR.
                    123: .PP
                    124: Input prefix function:
                    125: .TP
                    126: \fBins.ipfx(need)
                    127: If \fBins\fR's error state is non-zero return immediately.
                    128: If neccessary (and it is non-null) \fBf.tie\fR is flushed.
                    129: Flushing is neccessary if either \fBneed==0\fR or there
                    130: are less than \fBneed\fR characters immediately available.
                    131: If \fBf.skip()\fR is non-zero and \fBneed\fR is zero
                    132: then leading whitespace characters are
                    133: extracted from \fBins\fR.  Return zero 
                    134: or an error occurs while skipping whitespace.
                    135: Otherwise it returns non-zero.
                    136: .PP
                    137: Formatted input functions:
                    138: .TP
                    139: \fBins\fP>>\fPx\fR
                    140: Calls \fBipfx(0)\fR and if that returns non-zero
                    141: extracts characters from \fBins\fR and converts them according
                    142: to the type of \fBx\fR.  It stores the converted value in
                    143: \fBx\fR.
                    144: Errors are indicated by setting the
                    145: error state of \fBins\fR.  \f(CWfailbit\fR means that characters
                    146: in \fBins\fR were not a representation of the required type.
                    147: \f(CWbadbit\fR indicates that attempts to extract characters failed.
                    148: \fBins\fR is always returned.
                    149: .RS
                    150: .PP
                    151: The details of conversion depend on the values of \fBins\fR's format
                    152: state variable (see \fIios\fR(3C++)) and the
                    153: type of \fBx\fR.  Except as noted, the extraction operators
                    154: do not change the value
                    155: of the format state variables.
                    156: .TP
                    157: \f(CWchar*\fR, \f(CWunsigned char*\fR
                    158: Characters are stored in the array pointed at by \fBx\fR
                    159: until a whitespace character is found in \fBins\fR.
                    160: The terminating whitespace
                    161: is left in \fBins\fR.
                    162: If \fBins.width()\fR
                    163: is non-zero it is taken to be the size of the array, and
                    164: no more than \fBins.width()-1\fR characters are extracted.
                    165: A terminating
                    166: null character (0) is always stored (even when nothing else is
                    167: done because of \fBins\fR's status).
                    168: \fBins.width()\fR is reset to 0.
                    169: .TP
                    170: \f(CWchar&\fR, \f(CWunsigned char&\fR
                    171: A character is extracted and stored in \fBx\fR.
                    172: .TP
                    173: \f(CWshort&\fR, \f(CWunsigned short&\fR, \f(CWint&\fR, \f(CWunsigned int&\fR, \f(CWlong&\fR, \f(CWunsigned long&\fR
                    174: Characters are extracted and converted to an integral value
                    175: according to the conversion specified by 
                    176: \fBins.convbase()\fR.
                    177: The first character may be a sign (\f(CW+\fR or \f(CW-\fR).  After that,
                    178: if \fBins.convbase()\fR
                    179: is 8, 10, or 16 the conversion is octal, decimal, or hexadecimal respectively.
                    180: Conversion is terminated by the first "non-digit," which is left
                    181: in \fBins\fR. Octal digits are the characters '0' to '7'.
                    182: Decimal
                    183: digits are the octal digits plus '8' and '9'.
                    184: Hexadecimal digits
                    185: are the decimal digits plus the letters 'a' through 'f' (in either
                    186: upper or lower case).
                    187: If \fBins.convbase()\fR
                    188: is 0 then the number is interpreted according to C lexical
                    189: conventions.  That is, if the first characters (after the optional
                    190: sign) are \f(CW0x\fR or \f(CW0X\fR a hexadecimal conversion
                    191: is performed
                    192: on following hexadecimal digits.  Otherwise if the first character is a 
                    193: \f(CW0\fR an
                    194: octal conversion is performed and in all other cases a decimal conversion
                    195: is performed.
                    196: \f(CWfailbit\fR is set if there are no
                    197: digits (not counting the \f(CW0\fR in \f(CW0x\fR or \f(CW0X\fR) during
                    198: hex conversion) available.
                    199: .TP
                    200: \f(CWfloat&\fR, \f(CWdouble&\fR
                    201: Converts the characters according to C++ syntax for a float or double,
                    202: and stores the result in \fBx\fR.  \f(CWfailbit\fR is set if there are no
                    203: digits available in \fBins\fR or if it does not begin with a well formed
                    204: floating point number.
                    205: .RE
                    206: .PP
                    207: The type and name(\f(CWoperator>>\fR) of
                    208: the extraction operations are chosen
                    209: to give a convenient syntax for sequences of input operations.
                    210: The operator overloading of C++ permits
                    211: extraction functions to be declared for user defined classes.
                    212: These operations can then be used with the same syntax as the
                    213: member functions described here.
                    214: .PP
                    215: Unformatted input functions, which call \fBipfx(1)\fR and proceed only
                    216: if it returns non-zero:
                    217: .TP
                    218: \fBinsp=&ins.get(ptr,len,delim)\fR
                    219: Extracts characters and stores them in
                    220: the byte array beginning at \fBptr\fR
                    221: and extending for \fBlen\fR bytes.
                    222: Extraction stops when \fBdelim\fR is encountered
                    223: (\fBdelim\fR is left in \fBins\fR and not stored),
                    224: when \fBins\fR has no more characters,
                    225: or when the array has only one byte left.
                    226: \fBget\fR always stores a terminating null, even if it doesn't extract
                    227: any characters from \fBins\fR because of its error status.
                    228: \f(CWfailbit\fR is set only if \fBget\fR encounters
                    229: an end of file before it stores any characters.
                    230: .TP
                    231: \fBinsp=&ins.get(c)\fR
                    232: Extracts a single character
                    233: and stores it in \fBc\fR.
                    234: .TP
                    235: \fBinsp=&ins.get(sb,delim)\fB
                    236: Extracts characters from \fBins.rdbuf()\fR and stores
                    237: them into \fBsb\fR.
                    238: It stops if it encounters end of file or if a store into
                    239: \fBsb\fR
                    240: fails or
                    241: if it encounters \fBdelim\fR (which it leaves in \fBins\fR). 
                    242: \f(CWfailbit\fR is set if it stops because the store into \fBsb\fR fails
                    243: .TP
                    244: \fBi=ins.get()\fR.
                    245: Extracts a character and returns it.
                    246: \fBi\fR is \f(CWEOF\fR if extraction encounters end of file.
                    247: \f(CWfailbit\fR is never set.
                    248: .TP
                    249: \fBinsp=&ins.getline(ptr,len,delim)\fR
                    250: Does the same thing as \fBins.get(ptr,len,delim)\fR with the exception
                    251: that it extracts a terminating \fBdelim\fR character from \fBins\fR.
                    252: In case \fBdelim\fR occurs when exactly \fBlen\fR characters
                    253: have been extracted, termination is treated as being due to the
                    254: array being filled, and this \fBdelim\fR is left in \fBins\fR.
                    255: .TP
                    256: \fBinsp=&ins.ignore(n,d)\fR
                    257: Extracts and throws away
                    258: up to \fBn\fR characters.
                    259: Extraction stops prematurely if 
                    260: \fBd\fR is extracted or end of file is reached.
                    261: If \fBd\fR is \f(CWEOF\fR it can never cause termination.
                    262: .TP
                    263: \fBinsp=&ins.read(ptr,n)\fR
                    264: Extracts
                    265: \fBn\fR
                    266: characters and stores them in the array beginning at \fBptr\fR
                    267: If end of file is reached before \fBn\fR characters have been
                    268: extracted, 
                    269: \fBread\fR
                    270: stores whatever it can extract and sets \f(CWfailbit\fR.
                    271: The number of characters extracted can be determined via \fBins.gcount()\fR.
                    272: .PP
                    273: Other members are:
                    274: .TP
                    275: \fBi=ins.gcount()\fR
                    276: Returns the number of characters extracted by the last unformatted
                    277: input function.  Formatted input functions may call unformatted
                    278: input functions and thereby reset this number.
                    279: .TP
                    280: \fBi=ins.peek()\fR
                    281: Begins by calling \fBins.ipfx(1)\fR.
                    282: If that call returns zero or if \fBins\fR is at end of file,
                    283: it returns \f(CWEOF\fR.
                    284: Otherwise it returns (without extracting it) the next character.
                    285: .TP
                    286: \fBinsp=&ins.putback(c)\fR
                    287: Attempts to back up \fBins.rdbuf()\fR.
                    288: \fBc\fR must be the character before \fBins.rdbuf()\fR's get pointer.
                    289: (Unless other activity is modifying \fBins.rdbuf()\fR this
                    290: is the last character extracted from \fBins\fR.)
                    291: If it is not, the effect is undefined.
                    292: \fBputback\fR may fail (and set the error state).
                    293: Although it is a member of \f(CWistream\fR,
                    294: \fBputback\fR never extracts characters, so
                    295: it does not call \fBipfx\fR.  It will, however, return without
                    296: doing anything if the error state is non-zero.
                    297: .TP
                    298: \fBins>>manip\fR
                    299: Equivalent to \fBmanip(ins)\fR.
                    300: Syntactically this looks like an extractor
                    301: operation, but semantically it does an arbitrary operations
                    302: rather than converting a sequence of characters and storing the
                    303: result in \fBmanip\fR.
                    304: .PP
                    305: Member functions related to positioning.
                    306: .TP
                    307: \fBinsp=&ins.seekg(off,dir)\fR
                    308: Repositions \fBins.rdbuf()\fR's get pointer.
                    309: See \fIsbuf.pub\fR(3C++)\fR for a discussion of positioning.
                    310: .TP
                    311: \fBinsp=&ins.seekg(pos)\fR
                    312: Repositions \fBins.rdbuf()\fR's get pointer.
                    313: See \fIsbuf.pub\fR(3C++)\fR for a discussion of positioning.
                    314: .TP
                    315: \fBpos=ins.tellg()\fR
                    316: The current position of \fBios.rdbuf()\fR's get pointer.
                    317: See \fIsbuf.pub\fR(3C++)\fR for a discussion of positioning.
                    318: .PP
                    319: Manipulator:
                    320: .TP
                    321: \fBins>>ws\fR
                    322: Extracts whitespace characters.
                    323: .SH CAVEATS
                    324: .PP
                    325: There is no overflow detection on conversion of integers. There should
                    326: be, and overflow should cause the error state to be set.
                    327: .PP
                    328: There should be a way to input an arbitrary length string without 
                    329: knowing a maximum size beforehand.
                    330: .PP
                    331: .SH SEE ALSO
                    332: ios(3C++)
                    333: sbuf.pub(3C++)
                    334: manip(3C++)

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.