309 lines
8 KiB
Plaintext
309 lines
8 KiB
Plaintext
///////////////////////////////////////////////////////////////////////////
|
|
// FILE: streambu/streambu.h (streambuf support)
|
|
//
|
|
// =========================================================================
|
|
//
|
|
// Open Watcom Project
|
|
//
|
|
// Copyright (c) 2002-2010 Open Watcom Contributors. All Rights Reserved.
|
|
// Portions Copyright (c) 1983-2002 Sybase, Inc. All Rights Reserved.
|
|
//
|
|
// This file is automatically generated. Do not edit directly.
|
|
//
|
|
// =========================================================================
|
|
//
|
|
// Description: This header is part of the C++ standard library. It
|
|
// declares the streambuf base class.
|
|
///////////////////////////////////////////////////////////////////////////
|
|
#ifndef _STREAMBUF_INCLUDED
|
|
#define _STREAMBUF_INCLUDED
|
|
|
|
#ifndef _ENABLE_AUTODEPEND
|
|
#pragma read_only_file;
|
|
#endif
|
|
|
|
#ifndef __cplusplus
|
|
#error This header file requires C++
|
|
#endif
|
|
|
|
#ifndef _COMDEF_H_INCLUDED
|
|
#include <_comdef.h>
|
|
#endif
|
|
|
|
#ifndef _CSTDDEF_INCLUDED
|
|
#include <cstddef>
|
|
#endif
|
|
|
|
#ifndef _CSTRING_INCLUDED
|
|
#include <cstring>
|
|
#endif
|
|
|
|
// For multi-thread support.
|
|
#ifndef __lock_it
|
|
|
|
class __lock;
|
|
|
|
#ifdef __SW_BM
|
|
class _WPRTLINK __get_lock {
|
|
public:
|
|
__get_lock( __lock * );
|
|
~__get_lock();
|
|
private:
|
|
__lock *__lk;
|
|
};
|
|
#define __lock_it( __l ) __get_lock __lock_name( __LINE__ )( __l )
|
|
#define __lock_name( __ln ) __lock_glue( __lock__, __ln )
|
|
#define __lock_glue( __pre, __lin ) __pre ## __lin
|
|
#else
|
|
#define __lock_it( __l )
|
|
#endif
|
|
#endif
|
|
|
|
namespace std {
|
|
|
|
// **************************** STREAMBUF **********************************
|
|
#ifdef _M_IX86
|
|
#pragma pack( __push, 1 )
|
|
#else
|
|
#pragma pack( __push, 8 )
|
|
#endif
|
|
class _WPRTLINK streambuf {
|
|
public:
|
|
int in_avail() const;
|
|
int out_waiting() const;
|
|
int snextc();
|
|
int sgetn( char *__buf, int __len );
|
|
int speekc();
|
|
int sgetc();
|
|
int sgetchar();
|
|
int sbumpc();
|
|
void stossc();
|
|
int sputbackc( char __c );
|
|
int sputc( int __c );
|
|
int sputn( char const *__buf, int __len );
|
|
void dbp();
|
|
|
|
virtual int do_sgetn( char *__buf, int __len );
|
|
virtual int do_sputn( char const *__buf, int __len );
|
|
virtual int pbackfail( int __ignored );
|
|
virtual int overflow( int = EOF ) = 0;
|
|
virtual int underflow() = 0;
|
|
virtual streambuf *setbuf( char *__buf, int __len );
|
|
virtual streampos seekoff( streamoff __ignored1,
|
|
ios::seekdir __ignored2,
|
|
ios::openmode __ignored3 = ios::in | ios::out );
|
|
virtual streampos seekpos( streampos __position,
|
|
ios::openmode __mode = ios::in | ios::out );
|
|
virtual int sync();
|
|
|
|
__lock *__b_lock; // streambuf data member operations
|
|
|
|
protected:
|
|
streambuf();
|
|
streambuf( char *__buf, int __len );
|
|
virtual ~streambuf();
|
|
|
|
int allocate();
|
|
char *base() const;
|
|
char *ebuf() const;
|
|
int blen() const;
|
|
void setb( char *__buf, char *__endbuf, int __autodelete = 0 );
|
|
char *eback() const;
|
|
char *gptr() const;
|
|
char *egptr() const;
|
|
void gbump( streamoff __offset );
|
|
void setg( char *__eback, char *__gptr, char *__egptr );
|
|
char *pbase() const;
|
|
char *pptr() const;
|
|
char *epptr() const;
|
|
void pbump( streamoff __offset );
|
|
void setp( char *__pptr, char *__epptr );
|
|
int unbuffered( int __unbuffered );
|
|
int unbuffered() const;
|
|
|
|
virtual int doallocate();
|
|
|
|
private:
|
|
// Declared but not defined, to prevent copying a streambuf.
|
|
streambuf( streambuf & );
|
|
void operator = ( streambuf & );
|
|
|
|
char *__reserve_base;
|
|
char *__reserve_end;
|
|
char *__get_base;
|
|
char *__get_end;
|
|
char *__get_ptr;
|
|
char *__put_base;
|
|
char *__put_end;
|
|
char *__put_ptr;
|
|
unsigned __unbuffered_state : 1;
|
|
unsigned __delete_reserve : 1;
|
|
};
|
|
#pragma pack( __pop )
|
|
|
|
// *********************** Reserve area inline functions *******************
|
|
|
|
inline char *streambuf::base() const {
|
|
return( __reserve_base );
|
|
}
|
|
|
|
inline char *streambuf::ebuf() const {
|
|
return( __reserve_end );
|
|
}
|
|
|
|
inline int streambuf::blen() const {
|
|
__lock_it( __b_lock );
|
|
return( (int)(__reserve_end - __reserve_base) );
|
|
}
|
|
|
|
inline int streambuf::allocate() {
|
|
__lock_it( __b_lock );
|
|
return( (base() != NULL || unbuffered()) ? __NOT_EOF : doallocate() );
|
|
}
|
|
|
|
inline int streambuf::unbuffered() const {
|
|
return( __unbuffered_state );
|
|
}
|
|
|
|
inline int streambuf::unbuffered( int __unbuffered ) {
|
|
__lock_it( __b_lock );
|
|
int __old_unbuffered = __unbuffered_state;
|
|
__unbuffered_state = __unbuffered ? 1 : 0;
|
|
return( __old_unbuffered );
|
|
}
|
|
|
|
// *********************** Get area inline functions ***********************
|
|
|
|
inline char * streambuf::eback() const {
|
|
return( __get_base );
|
|
}
|
|
|
|
inline char * streambuf::gptr() const {
|
|
return( __get_ptr );
|
|
}
|
|
|
|
inline char * streambuf::egptr() const {
|
|
return( __get_end );
|
|
}
|
|
|
|
inline void streambuf::gbump( streamoff __offset ) {
|
|
__lock_it( __b_lock );
|
|
__get_ptr += __offset;
|
|
}
|
|
|
|
inline void streambuf::setg( char *__eback, char *__gptr, char *__egptr ) {
|
|
__lock_it( __b_lock );
|
|
__get_base = __eback;
|
|
__get_ptr = __gptr;
|
|
__get_end = __egptr;
|
|
}
|
|
|
|
// *********************** Put area inline functions ***********************
|
|
|
|
inline char * streambuf::pbase() const {
|
|
return( __put_base );
|
|
}
|
|
|
|
inline char * streambuf::pptr() const {
|
|
return( __put_ptr );
|
|
}
|
|
|
|
inline char * streambuf::epptr() const {
|
|
return( __put_end );
|
|
}
|
|
|
|
inline void streambuf::pbump( streamoff __offset ) {
|
|
__lock_it( __b_lock );
|
|
__put_ptr += __offset;
|
|
}
|
|
|
|
inline void streambuf::setp( char *__pptr, char *__epptr ) {
|
|
__lock_it( __b_lock );
|
|
__put_base = __pptr;
|
|
__put_ptr = __pptr;
|
|
__put_end = __epptr;
|
|
}
|
|
|
|
// *********************** Inline input functions **************************
|
|
|
|
inline int streambuf::in_avail() const {
|
|
__lock_it( __b_lock );
|
|
return( (int)(__get_end - __get_ptr) );
|
|
}
|
|
|
|
inline int streambuf::sgetchar() {
|
|
__lock_it( __b_lock );
|
|
return( (__get_ptr >= __get_end) && (underflow() == EOF) ? EOF
|
|
: *__get_ptr++ );
|
|
}
|
|
|
|
inline int streambuf::sbumpc() {
|
|
return( sgetchar() );
|
|
}
|
|
|
|
inline int streambuf::snextc() {
|
|
__lock_it( __b_lock );
|
|
return( (__get_ptr) && (++__get_ptr < __get_end) ? *__get_ptr
|
|
: underflow() );
|
|
}
|
|
|
|
inline int streambuf::speekc() {
|
|
__lock_it( __b_lock );
|
|
return( (__get_ptr < __get_end) ? *__get_ptr
|
|
: underflow() );
|
|
}
|
|
|
|
inline int streambuf::sgetc() {
|
|
return( speekc() );
|
|
}
|
|
|
|
inline int streambuf::sgetn( char *__buf, int __len ) {
|
|
__lock_it( __b_lock );
|
|
if( __len < (int)(__get_end - __get_ptr) ) {
|
|
memcpy( __buf, __get_ptr, __len );
|
|
gbump( __len );
|
|
return( __len );
|
|
}
|
|
return( do_sgetn( __buf, __len ) );
|
|
}
|
|
|
|
inline void streambuf::stossc() {
|
|
__lock_it( __b_lock );
|
|
if( (__get_ptr < __get_end) || (underflow() != EOF) ) {
|
|
++__get_ptr;
|
|
}
|
|
}
|
|
|
|
// *********************** Inline output functions *************************
|
|
|
|
inline int streambuf::out_waiting() const {
|
|
__lock_it( __b_lock );
|
|
return( (int)(__put_ptr - __put_base) );
|
|
}
|
|
|
|
inline int streambuf::sputbackc( char __c ) {
|
|
__lock_it( __b_lock );
|
|
return( (__get_ptr > __get_base) ? (*--__get_ptr = __c)
|
|
: pbackfail( __c ) );
|
|
}
|
|
|
|
inline int streambuf::sputc( int __c ) {
|
|
__lock_it( __b_lock );
|
|
return( (__put_ptr >= __put_end) ? overflow( __c )
|
|
: (*__put_ptr++ = (char)__c) );
|
|
}
|
|
|
|
inline int streambuf::sputn( char const *__buf, int __len ) {
|
|
__lock_it( __b_lock );
|
|
if( __len < (int)(__put_end - __put_ptr) ) {
|
|
memcpy( __put_ptr, __buf, __len );
|
|
pbump( __len );
|
|
return( __len );
|
|
}
|
|
return( do_sputn( __buf, __len ) );
|
|
}
|
|
|
|
} // namespace std
|
|
|
|
#endif
|