windows-nt/Source/XPSP1/NT/base/crts/libw32/include/strstream

254 lines
6.5 KiB
Plaintext
Raw Permalink Normal View History

2020-09-26 03:20:57 -05:00
// strstream standard header
#pragma once
#ifndef _STRSTREAM_
#define _STRSTREAM_
#include <istream>
#pragma pack(push,8)
#pragma warning(push,3)
_STD_BEGIN
// CLASS strstreambuf
class strstreambuf
: public streambuf
{ // stream buffer associated with static or allocated character array
public:
enum
{ // constants for bits in stream state
_Allocated = 1, // set if character array storage has been allocated
_Constant = 2, // set if character array nonmutable
_Dynamic = 4, // set if character array length grows on demand
_Frozen = 8}; // set if character array ownership given away
typedef int _Strstate;
explicit strstreambuf(streamsize _Count = 0)
{ // construct with empty character array, suggested initial size
_Init(_Count);
}
strstreambuf(void *(__cdecl *_Allocfunc)(size_t),
void (__cdecl *_Freefunc)(void *))
{ // construct with empty character array, allocation functions
_Init();
_Palloc = _Allocfunc;
_Pfree = _Freefunc;
}
strstreambuf(char *_Getptr, streamsize _Count, char *_Putptr = 0)
{ // construct with [_Getptr, _Getptr + _Count), possibly mutable
_Init(_Count, _Getptr, _Putptr);
}
strstreambuf(unsigned char *_Getptr, streamsize _Count,
unsigned char *_Putptr = 0)
{ // construct with [_Getptr, _Getptr + _Count), possibly mutable
_Init(_Count, (char *)_Getptr, (char *)_Putptr);
}
strstreambuf(const char *_Getptr, streamsize _Count)
{ // construct with [_Getptr, _Getptr + _Count), nonmutable
_Init(_Count, (char *)_Getptr, 0, _Constant);
}
strstreambuf(const unsigned char *_Getptr, streamsize _Count)
{ // construct with [_Getptr, _Getptr + _Count), nonmutable
_Init(_Count, (char *)_Getptr, 0, _Constant);
}
_CRTIMP2 virtual ~strstreambuf(); // destroy the object
_CRTIMP2 void freeze(bool = true); // freeze or unfreeze writing
char *str()
{ // freeze and return pointer to character array
freeze();
return (gptr());
}
streamsize pcount() const
{ // return size of writable character array
return (pptr() == 0 ? 0 : (streamsize)(pptr() - pbase()));
}
strstreambuf(signed char *_Getptr, streamsize _Count,
signed char *_Putptr = 0)
{ // construct with [_Getptr, _Getptr + _Count), possibly mutable
_Init(_Count, (char *)_Getptr, (char *)_Putptr);
}
strstreambuf(const signed char *_Getptr, streamsize _Count)
{ // construct with [_Getptr, _Getptr + _Count), nonmutable
_Init(_Count, (char *)_Getptr, 0, _Constant);
}
protected:
_CRTIMP2 virtual int overflow(int = EOF); // try to extend write area
_CRTIMP2 virtual int pbackfail(int = EOF); // try to putback a character
_CRTIMP2 virtual int underflow(); // read if read position available
_CRTIMP2 virtual streampos seekoff(streamoff,
ios_base::seekdir,
ios_base::openmode =
ios_base::in | ios_base::out); // seek by specified offset
_CRTIMP2 virtual streampos seekpos(streampos,
ios_base::openmode =
ios_base::in | ios_base::out); // seek to memorized position
_CRTIMP2 void _Init(streamsize = 0, char * = 0, char * = 0,
_Strstate = (_Strstate)0); // initialize with possibly static buffer
_CRTIMP2 void _Tidy(); // free any allocated storage
private:
enum
{ // constant for default minimum buffer size
_MINSIZE = 32};
streamsize _Minsize; // the minimum buffer size
char *_Pendsave; // the saved end pointer during freeze
char *_Seekhigh; // the high-water pointer in character array
_Strstate _Strmode; // the stream state
void *(__cdecl *_Palloc)(size_t); // the pointer to allocator function
void (__cdecl *_Pfree)(void *); // the pointer to free function
};
// CLASS istrstream
class istrstream
: public istream
{ // input stream associated with a character array
public:
explicit istrstream(const char *_Ptr)
: istream(&_Mysb), _Mysb(_Ptr, 0)
{ // construct with NTBS
}
istrstream(const char *_Ptr, streamsize _Count)
: istream(&_Mysb), _Mysb(_Ptr, _Count)
{ // construct with [_Ptr, _Ptr + _Count)
}
explicit istrstream(char *_Ptr)
: istream(&_Mysb), _Mysb((const char *)_Ptr, 0)
{ // construct with NTBS
}
istrstream(char *_Ptr, int _Count)
: istream(&_Mysb), _Mysb((const char *)_Ptr, _Count)
{ // construct with [_Ptr, _Ptr + _Count)
}
_CRTIMP2 virtual ~istrstream(); // destroy the object
strstreambuf *rdbuf() const
{ // return pointer to character array buffer
return ((strstreambuf *)&_Mysb);
}
char *str()
{ // freeze and return pointer to character array
return (_Mysb.str());
}
private:
strstreambuf _Mysb; // the string buffer
};
// CLASS ostrstream
class ostrstream
: public ostream
{ // output stream associated with a character array
public:
ostrstream()
: ostream(&_Mysb), _Mysb()
{ // construct with empty character array
}
_CRTIMP2 ostrstream(char *, streamsize,
ios_base::openmode =
ios_base::out); // construct with static array
_CRTIMP2 virtual ~ostrstream(); // destroy the object
strstreambuf *rdbuf() const
{ // return pointer to character array buffer
return ((strstreambuf *)&_Mysb);
}
void freeze(bool _Freezeit = true)
{ // freeze or unfreeze writing
_Mysb.freeze(_Freezeit);
}
char *str()
{ // freeze and return pointer to character array
return (_Mysb.str());
}
streamsize pcount() const
{ // return size of writable character array
return (_Mysb.pcount());
}
private:
strstreambuf _Mysb; // the character array buffer
};
// CLASS strstream
class strstream
: public iostream
{ // input/output stream associated with character array buffer
public:
typedef char char_type;
typedef int int_type;
typedef streampos pos_type;
typedef streamoff off_type;
strstream()
: iostream(&_Mysb), _Mysb()
{ // construct with empty character array
}
_CRTIMP2 strstream(char *, streamsize,
ios_base::openmode =
ios_base::in | ios_base::out); // construct with static array
_CRTIMP2 virtual ~strstream(); // destroy the object
strstreambuf *rdbuf() const
{ // return pointer to character array buffer
return ((strstreambuf *)&_Mysb);
}
void freeze(bool _Freezeit = true)
{ // freeze or unfreeze writing
_Mysb.freeze(_Freezeit);
}
char *str()
{ // freeze and return pointer to character array
return (_Mysb.str());
}
streamsize pcount() const
{ // return size of writable character array
return (_Mysb.pcount());
}
private:
strstreambuf _Mysb; // the character array buffer
};
_STD_END
#pragma warning(pop)
#pragma pack(pop)
#endif /* _STRSTREAM_ */
/*
* Copyright (c) 1992-2001 by P.J. Plauger. ALL RIGHTS RESERVED.
* Consult your license regarding permissions and restrictions.
V3.10:0009 */