1 // strstream standard header
2 #pragma once
3 #ifndef _STRSTREAM_
4 #define _STRSTREAM_
5 #ifndef RC_INVOKED
6 #include <istream>
7
8 #ifdef _MSC_VER
9  #pragma pack(push,_CRT_PACKING)
10  #pragma warning(push,3)
11 #endif  /* _MSC_VER */
12
13 extern "C" size_t  __cdecl strlen(const char *); 
14 _STD_BEGIN
15
16         // CLASS strstreambuf
17 class _CRTIMP2_PURE strstreambuf
18     : public streambuf
19     {    // stream buffer associated with static or allocated character array
20 public:
21     enum
22         {    // constants for bits in stream state
23         _Allocated = 1,    // set if character array storage has been allocated
24         _Constant = 2,    // set if character array nonmutable
25         _Dynamic = 4,    // set if character array length grows on demand
26         _Frozen = 8};    // set if character array ownership given away
27     typedef int _Strstate;
28
29     explicit __CLR_OR_THIS_CALL strstreambuf(streamsize _Count = 0)
30         {    // construct with empty character array, suggested initial size
31         _Init(_Count);
32         }
33
34     __CLR_OR_THIS_CALL strstreambuf(void *(__CLRCALL_OR_CDECL *_Allocfunc)(size_t),
35         void (__CLRCALL_OR_CDECL *_Freefunc)(void *))
36         {    // construct with empty character array, allocation functions
37         _Init();
38         _Palloc = _Allocfunc;
39         _Pfree = _Freefunc;
40         }
41
42     __CLR_OR_THIS_CALL strstreambuf(_In_opt_z_ char *_Getptr, streamsize _Count, 
43         _In_opt_z_ char *_Putptr = 0)
44         {    // construct with [_Getptr, _Getptr + _Count), possibly mutable
45         _Init(_Count, _Getptr, _Putptr);
46         }
47
48 #pragma warning(push)
49 #pragma warning(disable: 6054)
50     __CLR_OR_THIS_CALL strstreambuf(_In_opt_z_ unsigned char *_Getptr, streamsize _Count,
51         _In_opt_z_ unsigned char *_Putptr = 0)
52              {    // construct with [_Getptr, _Getptr + _Count), possibly mutable
53         _Init(_Count, (char *)_Getptr, (char *)_Putptr);
54         }
55 #pragma warning(pop)
56
57     __CLR_OR_THIS_CALL strstreambuf(_In_z_ const char *_Getptr, streamsize _Count)
58         {    // construct with [_Getptr, _Getptr + _Count), nonmutable
Lines 59 ... 455 are skipped.
456     {    // input/output stream associated with character array buffer
457 public:
458     typedef char char_type;
459     typedef int int_type;
460     typedef streampos pos_type;
461     typedef streamoff off_type;
462
463     __CLR_OR_THIS_CALL strstream()
464         : iostream(&_Mysb), _Mysb()
465         {    // construct with empty character array
466         }
467
468     __CLR_OR_THIS_CALL strstream(_In_opt_z_ char *_Ptr, streamsize _Count,
469         ios_base::openmode _Mode=
470             ios_base::in | ios_base::out)    // construct with static array
471              : iostream(&_Mysb),
472              _Mysb(_Ptr, _Count, _Ptr == 0 || (_Mode & ios_base::app) == 0 ?
473                     _Ptr : _Ptr + strlen(_Ptr))
474              {    // construct with [ptr, ptr + count)
475              }
476
477     virtual __CLR_OR_THIS_CALL ~strstream()
478              {    // destroy a strstream
479              }
480
481     strstreambuf *__CLR_OR_THIS_CALL rdbuf() const
482         {    // return pointer to character array buffer
483         return ((strstreambuf *)&_Mysb);
484         }
485
486     void __CLR_OR_THIS_CALL freeze(bool _Freezeit = true)
487         {    // freeze or unfreeze writing
488         _Mysb.freeze(_Freezeit);
489         }
490
491     char *__CLR_OR_THIS_CALL str()
492         {    // freeze and return pointer to character array
493         return (_Mysb.str());
494         }
495
496     streamsize __CLR_OR_THIS_CALL pcount() const
497         {    // return size of writable character array
498         return (_Mysb.pcount());
499         }
500
501 private:
502     strstreambuf _Mysb;    // the character array buffer
503     };
504 _STD_END
505 #ifdef _MSC_VER
506  #pragma warning(pop)
507  #pragma pack(pop)
508 #endif  /* _MSC_VER */
509
510 #endif /* RC_INVOKED */
511 #endif /* _STRSTREAM_ */
512
513 /*
514  * Copyright (c) 1992-2006 by P.J. Plauger.  ALL RIGHTS RESERVED.
515  * Consult your license regarding permissions and restrictions.
516  V5.02:0009 */
517