home *** CD-ROM | disk | FTP | other *** search
/ Supercompiler 1997 / SUPERCOMPILER97.iso / MS_VC.50 / VC / INCLUDE / Strstream < prev    next >
Encoding:
Text File  |  1996-11-02  |  3.6 KB  |  128 lines

  1. // strstream standard header
  2. #ifndef _STRSTREAM_
  3. #define _STRSTREAM_
  4. #include <istream>
  5.  
  6. #ifdef  _MSC_VER
  7. #pragma pack(push,8)
  8. #endif  /* _MSC_VER */
  9. _STD_BEGIN
  10.         // CLASS strstreambuf
  11. class strstreambuf : public streambuf {
  12. public:
  13.     enum __Strstate {_Allocated = 1, _Constant = 2,
  14.         _Dynamic = 4, _Frozen = 8};
  15.     _BITMASK(__Strstate, _Strstate);
  16.     explicit strstreambuf(streamsize _N = 0)
  17.         {_Init(_N); }
  18.     strstreambuf(void *(__cdecl *_A)(size_t),
  19.         void (__cdecl *_F)(void *))
  20.         {_Init(), _Palloc = _A, _Pfree = _F; }
  21.     strstreambuf(char *_G, streamsize _N, char *_P = 0)
  22.         {_Init(_N, _G, _P); }
  23.     strstreambuf(unsigned char *_G, streamsize _N,
  24.         unsigned char *_P = 0)
  25.         {_Init(_N, (char *)_G, (char *)_P); }
  26.     strstreambuf(const char *_G, streamsize _N)
  27.         {_Init(_N, (char *)_G, 0, _Constant); }
  28.     strstreambuf(const unsigned char *_G, streamsize _N)
  29.         {_Init(_N, (char *)_G, 0, _Constant); }
  30.     _CRTIMP virtual ~strstreambuf();
  31.     _CRTIMP void freeze(bool = true);
  32.     char *str()
  33.         {freeze();
  34.         return (gptr()); }
  35.     streamsize pcount() const
  36.         {return (pptr() == 0 ? 0 : pptr() - pbase()); } 
  37.     strstreambuf(signed char *_G, streamsize _N,
  38.         signed char *_P = 0)
  39.         {_Init(_N, (char *)_G, (char *)_P); }
  40.     strstreambuf(const signed char *_G, streamsize _N)
  41.         {_Init(_N, (char *)_G, 0, _Constant); }
  42. protected:
  43.     _CRTIMP virtual int overflow(int = EOF);
  44.     _CRTIMP virtual int pbackfail(int = EOF);
  45.     _CRTIMP virtual int underflow();
  46.     _CRTIMP virtual streampos seekoff(streamoff, ios::seekdir,
  47.         ios::openmode = ios::in | ios::out);
  48.     _CRTIMP virtual streampos seekpos(streampos,
  49.         ios::openmode = ios::in | ios::out);
  50.     _CRTIMP void _Init(int = 0, char * = 0, char * = 0,
  51.         _Strstate = (_Strstate)0);
  52.     _CRTIMP void _Tidy();
  53. private:
  54.     enum {_ALSIZE = 512, _MINSIZE = 32};
  55.     char *_Pendsave, *_Seekhigh;
  56.     int _Alsize;
  57.     _Strstate _Strmode;
  58.     void *(__cdecl *_Palloc)(size_t);
  59.     void (__cdecl *_Pfree)(void *);
  60.     };
  61. _BITMASK_OPS(strstreambuf::__Strstate)
  62.         // CLASS istrstream
  63. class istrstream : public istream {
  64. public:
  65.     explicit istrstream(const char *_S)
  66.         : istream(&_Sb), _Sb(_S, 0) {}
  67.     istrstream(const char *_S, streamsize _N)
  68.         : istream(&_Sb), _Sb(_S, _N) {}
  69.     explicit istrstream(char *_S)
  70.         : istream(&_Sb), _Sb((const char *)_S, 0) {}
  71.     istrstream(char *_S, int _N)
  72.         : istream(&_Sb), _Sb((const char *)_S, _N) {}
  73.     _CRTIMP virtual ~istrstream();
  74.     strstreambuf *rdbuf() const
  75.         {return ((strstreambuf *)&_Sb); }
  76.     char *str()
  77.         {return (_Sb.str()); }
  78. private:
  79.     strstreambuf _Sb;
  80.     };
  81.         // CLASS ostrstream
  82. class ostrstream : public ostream {
  83. public:
  84.     ostrstream()
  85.         : ostream(&_Sb), _Sb() {}
  86.     _CRTIMP ostrstream(char *, streamsize, openmode = out);
  87.     _CRTIMP virtual ~ostrstream();
  88.     strstreambuf *rdbuf() const
  89.         {return ((strstreambuf *)&_Sb); }
  90.     void freeze(bool _F = true)
  91.         {_Sb.freeze(_F); }
  92.     char *str()
  93.         {return (_Sb.str()); }
  94.     streamsize pcount() const
  95.         {return (_Sb.pcount()); }
  96. private:
  97.     strstreambuf _Sb;
  98.     };
  99.         // CLASS strstream
  100. class strstream : public iostream {
  101. public:
  102.     strstream()
  103.         : iostream(&_Sb), _Sb() {}
  104.     _CRTIMP strstream(char *, streamsize, openmode = in | out);
  105.     _CRTIMP virtual ~strstream();
  106.     strstreambuf *rdbuf() const
  107.         {return ((strstreambuf *)&_Sb); }
  108.     void freeze(bool _F = true)
  109.         {_Sb.freeze(_F); }
  110.     char *str()
  111.         {return (_Sb.str()); }
  112.     streamsize pcount() const
  113.         {return (_Sb.pcount()); }
  114. private:
  115.     strstreambuf _Sb;
  116.     };
  117. _STD_END
  118. #ifdef  _MSC_VER
  119. #pragma pack(pop)
  120. #endif  /* _MSC_VER */
  121.  
  122. #endif /* _STRSTREAM_ */
  123.  
  124. /*
  125.  * Copyright (c) 1994 by P.J. Plauger.  ALL RIGHTS RESERVED. 
  126.  * Consult your license regarding permissions and restrictions.
  127.  */
  128.