home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
vc98
/
crt
/
src
/
streamb1.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
1998-06-17
|
3KB
|
162 lines
/***
*streamb1.cpp - non-core functions for streambuf class.
*
* Copyright (c) 1990-1997, Microsoft Corporation. All rights reserved.
*
*Purpose:
* None-core functions for streambuf class.
*
*******************************************************************************/
#include <cruntime.h>
#include <internal.h>
#include <iostream.h>
#pragma hdrstop
/***
*int streambuf::snextc() -
*
*Purpose:
* Increments get_pointer and returns the character following the new
* get_pointer.
*
*Entry:
* None.
*
*Exit:
* Returns the next character or EOF.
*
*Exceptions:
* Returns EOF if error.
*
*******************************************************************************/
int streambuf::snextc()
{
if (_fUnbuf)
{
if (x_lastc==EOF)
underflow(); // skip 1st character
return x_lastc = underflow(); // return next character, or EOF
}
else
{
if ((!egptr()) || (gptr()>=egptr()))
underflow(); // make sure buffer
if ((++_gptr) < egptr())
return (int)(unsigned char) *gptr();
return underflow(); // returns next character, or EOF
}
}
/***
*int streambuf::sbumpc() -
*
*Purpose:
* Increments get_pointer and returns the character that the previous
* get_pointer pointed to.
*
*Entry:
* None.
*
*Exit:
* Returns current character before bumping get pointer.
*
*Exceptions:
* Returns EOF if error.
*
*******************************************************************************/
int streambuf::sbumpc()
{
int c;
if (_fUnbuf) // no buffer
{
if (x_lastc==EOF)
{
c = underflow();
}
else
{
c = x_lastc;
x_lastc = EOF;
}
}
else
{
if( gptr() < egptr() )
{
c = (int)(unsigned char)*(gptr());
}
else
{
c = underflow();
}
_gptr++;
}
return c;
}
/***
*void streambuf::stossc() - advance get pointer
*
*Purpose:
* Advances the get pointer. Does not check for EOF.
*
*Entry:
* None.
*
*Exit:
* None.
*
*Exceptions:
*
*******************************************************************************/
void streambuf::stossc()
{
if (_fUnbuf)
{
if (x_lastc==EOF)
underflow(); // throw away current character
else
x_lastc=EOF; // discard current cached character
}
else
{
if (gptr() >= egptr())
underflow();
if (gptr() < egptr())
_gptr++;
}
}
/***
*int streambuf::sgetc() -
*
*Purpose:
* Returns the character that the previous get_pointer points to.
* DOES NOT advance the get pointer.
*
*Entry:
* None.
*
*Exit:
* Returns current character or EOF if error.
*
*Exceptions:
* Returns EOF if error.
*
*******************************************************************************/
int streambuf::sgetc()
{
if (_fUnbuf) // no buffer
{
if (x_lastc==EOF)
x_lastc = underflow();
return x_lastc;
}
else
return underflow();
}