/*** *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 #include #include #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(); }