#if __SC__ || __RCC__ #pragma once #endif #ifndef _STRSTREAM_H_ #define _STRSTREAM_H_ #ifndef __cplusplus #error Use C++ compiler for strstrea.h #endif /* * strstream.h -- class strstream declarations * * $Id: strstrea.h,v 1.1.1.1 1997/01/02 19:16:44 smarx Exp $ * **************************************************************************** * * Rogue Wave Software, Inc. * P.O. Box 2328 * Corvallis, OR 97339 * Voice: (503) 754-3010 FAX: (503) 757-6650 * * Copyright (C) 1991, 1993, 1994. * This software is subject to copyright protection under the laws of * the United States and other countries. * ALL RIGHTS RESERVED * *************************************************************************** * * $Log: strstrea.h,v $ * Revision 1.1.1.1 1997/01/02 19:16:44 smarx * cafe12 * // * // * 5 2/26/96 8:05a Smarx * * Rev 1.3 24 May 1995 15:42:34 Andrew * Fixed problem where structs/classes were not in pragma pack(__DEFALIGN) * * Rev 1.2 08 Oct 1994 14:11:54 BUSHNELL * Added pragma once for faster compilations * * Rev 1.1 02 Jun 1994 21:35:44 bushnell * added ifdef so that MS RC will not include header twice * * Rev 1.0 28 Apr 1994 19:19:44 thompson * Initial revision. * * Rev 1.0 20 Apr 1994 17:46:36 thompson * Initial revision. * Revision 1.1 1994/04/14 16:57:40 vriezen * Initial revision * * Revision 1.2 1994/04/14 00:50:17 vriezen * Updated copywrite, added ID and LOG and changed comments to indicate .cpp filename * * * */ #include #pragma pack(__DEFALIGN) class strstreambuf : public streambuf { public: strstreambuf(); strstreambuf(int n); strstreambuf(void* (*a)(long), void (*f)(void*)); strstreambuf(char* _s, int, char* _strt=0); ~strstreambuf(); void freeze(int = 1); int isfrozen(); char* str(); virtual int doallocate(); virtual int overflow(int); virtual int underflow(); virtual streambuf* setbuf(char*, int); virtual streampos seekoff(streamoff, ios::seek_dir, int); private: void* (*allocf)(long); void (*freef)(void*); short ssbflags; enum { dynamic = 1, frozen = 2, unlimited = 4 }; int next_alloc; char* real_end; void init(char*, int, char*); }; inline int strstreambuf::isfrozen() { return (ssbflags&frozen) != 0; } class strstreambase : public virtual ios { public: strstreambuf* rdbuf(); protected: strstreambase(char*, int, char*); strstreambase(); ~strstreambase(); private: strstreambuf buf; }; inline strstreambuf* strstreambase::rdbuf() { return &this->buf; } class istrstream : public strstreambase, public istream { public: istrstream(char*); istrstream(char*, int); ~istrstream(); }; class ostrstream : public strstreambase, public ostream { public: ostrstream(char*, int, int = ios::out); ostrstream(); ~ostrstream(); char* str(); int pcount(); }; inline char* ostrstream::str() { return strstreambase::rdbuf()->str(); } inline int ostrstream::pcount() { return strstreambase::rdbuf()->out_waiting(); } class strstream : public strstreambase, public iostream { public: strstream(); strstream(char*, int _sz, int _m); ~strstream(); char* str(); }; inline char* strstream::str() { return strstreambase::rdbuf()->str(); } #pragma pack() #endif /* _STRSTREAM_H_ */