⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strstream

📁 C语言库函数的原型,有用的拿去
💻
📖 第 1 页 / 共 2 页
字号:
			;	// no buffer to free
		else if (_Pfree != 0)
			(*_Pfree)(eback());	// free with function call
		else
			_DELETE_CRT_VEC(eback());	// free by deleting array

		_Seekhigh = 0;
		_Strmode &= ~(_Allocated | _Frozen);
		}

private:
	enum
		{	// constant for default minimum buffer size
		_MINSIZE = 32};

	int _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 *(__CLRCALL_OR_CDECL *_Palloc)(size_t);	// the pointer to allocator function
	void (__CLRCALL_OR_CDECL *_Pfree)(void *);	// the pointer to free function
	};

	// strstreambuf OPERATORS
inline void swap(strstreambuf& _Left, strstreambuf& _Right)
	{	// swap _Left and _Right strstreambufs
	_Left.swap(_Right);
	}

inline void swap(strstreambuf& _Left, strstreambuf&& _Right)
	{	// swap _Left and _Right strstreambufs
	typedef strstreambuf _Myt;
	_Left.swap(_STD forward<_Myt>(_Right));
	}

inline void swap(strstreambuf&& _Left, strstreambuf& _Right)
	{	// swap _Left and _Right strstreambufs
	typedef strstreambuf _Myt;
	_Right.swap(_STD forward<_Myt>(_Left));
	}

		// CLASS istrstream
class istrstream
	: public istream
	{	// input stream associated with a character array
public:
	typedef istrstream _Myt;
	typedef istream _Mybase;
	typedef strstreambuf _Mysb;

	explicit __CLR_OR_THIS_CALL istrstream(const char *_Ptr)
		: _Mybase(&_Strbuffer), _Strbuffer(_Ptr, 0)
		{	// construct with NTBS
		}

	__CLR_OR_THIS_CALL istrstream(const char *_Ptr,
		streamsize _Count)
		: _Mybase(&_Strbuffer), _Strbuffer(_Ptr, _Count)
		{	// construct with [_Ptr, _Ptr + _Count)
		}

	explicit __CLR_OR_THIS_CALL istrstream(char *_Ptr)
		: _Mybase(&_Strbuffer), _Strbuffer((const char *)_Ptr, 0)
		{	// construct with NTBS
		}

	__CLR_OR_THIS_CALL istrstream(char *_Ptr,
		int _Count)
		: _Mybase(&_Strbuffer), _Strbuffer((const char *)_Ptr, _Count)
		{	// construct with [_Ptr, _Ptr + _Count)
		}

	__CLR_OR_THIS_CALL istrstream(_Myt&& _Right)
		: _Mybase(&_Strbuffer)
		{	// construct by moving _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		}

	_Myt& __CLR_OR_THIS_CALL operator=(_Myt&& _Right)
		{	// move from _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		return (*this);
		}

	void __CLR_OR_THIS_CALL _Assign_rv(_Myt&& _Right)
		{	// move from _Right
		if (this != &_Right)
			{	// different, swap base and buffer
			_Strbuffer.clear();
			this->swap(_Right);
			}
		}

	void __CLR_OR_THIS_CALL swap(_Myt& _Right)
		{	// swap with _Right
		if (this != &_Right)
			{	// different, swap base and buffer
			_Mybase::swap(_Right);
			_Strbuffer.swap(_Right._Strbuffer);
			}
		}

	void __CLR_OR_THIS_CALL swap(_Myt&& _Right)
		{	// swap with _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		}

	virtual __CLR_OR_THIS_CALL ~istrstream()
		{	// destroy an istrstream
		}

	_Mysb *__CLR_OR_THIS_CALL rdbuf() const
		{	// return pointer to character array buffer
		return ((_Mysb *)&_Strbuffer);
		}

	char *__CLR_OR_THIS_CALL str()
		{	// freeze and return pointer to character array
		return (_Strbuffer.str());
		}

private:
	_Mysb _Strbuffer;	// the string buffer
	};

	// istrstream OPERATORS
inline void swap(istrstream& _Left, istrstream& _Right)
	{	// swap _Left and _Right istrstreams
	_Left.swap(_Right);
	}

inline void swap(istrstream& _Left, istrstream&& _Right)
	{	// swap _Left and _Right istrstreams
	typedef istrstream _Myt;
	_Left.swap(_STD forward<_Myt>(_Right));
	}

inline void swap(istrstream&& _Left, istrstream& _Right)
	{	// swap _Left and _Right istrstreams
	typedef istrstream _Myt;
	_Right.swap(_STD forward<_Myt>(_Left));
	}

		// CLASS ostrstream
class ostrstream
	: public ostream
	{	// output stream associated with a character array
public:
	typedef ostrstream _Myt;
	typedef ostream _Mybase;
	typedef strstreambuf _Mysb;

	__CLR_OR_THIS_CALL ostrstream()
		: ostream(&_Strbuffer), _Strbuffer()
		{	// construct with empty character array
		}

	__CLR_OR_THIS_CALL ostrstream(char *_Ptr,
		streamsize _Count,
		ios_base::openmode _Mode =
			ios_base::out)
		: ostream(&_Strbuffer),
			_Strbuffer(_Ptr, _Count,
				_Ptr == 0 || (_Mode & ios_base::app) == 0
					? _Ptr : _Ptr + _CSTD strlen(_Ptr))
		{	// construct with [_Ptr, _Ptr + _Count)
		}

	__CLR_OR_THIS_CALL ostrstream(_Myt&& _Right)
		: _Mybase(&_Strbuffer)
		{	// construct by moving _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		}

	_Myt& __CLR_OR_THIS_CALL operator=(_Myt&& _Right)
		{	// move from _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		return (*this);
		}

	void __CLR_OR_THIS_CALL _Assign_rv(_Myt&& _Right)
		{	// move from _Right
		if (this != &_Right)
			{	// different, swap base and buffer
			_Strbuffer.clear();
			this->swap(_Right);
			}
		}

	void __CLR_OR_THIS_CALL swap(_Myt& _Right)
		{	// swap with _Right
		if (this != &_Right)
			{	// different, swap base and buffer
			_Mybase::swap(_Right);
			_Strbuffer.swap(_Right._Strbuffer);
			}
		}

	void __CLR_OR_THIS_CALL swap(_Myt&& _Right)
		{	// swap with _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		}

	virtual __CLR_OR_THIS_CALL ~ostrstream()
		{	// destroy an ostrstream
		}

	_Mysb *__CLR_OR_THIS_CALL rdbuf() const
		{	// return pointer to character array buffer
		return ((_Mysb *)&_Strbuffer);
		}

	void __CLR_OR_THIS_CALL freeze(bool _Freezeit = true)
		{	// freeze or unfreeze writing
		_Strbuffer.freeze(_Freezeit);
		}

	char *__CLR_OR_THIS_CALL str()
		{	// freeze and return pointer to character array
		return (_Strbuffer.str());
		}

	streamsize __CLR_OR_THIS_CALL pcount() const
		{	// return size of writable character array
		return (_Strbuffer.pcount());
		}

private:
	_Mysb _Strbuffer;	// the string buffer
	};

	// ostrstream OPERATORS
inline void swap(ostrstream& _Left, ostrstream& _Right)
	{	// swap _Left and _Right ostrstreams
	_Left.swap(_Right);
	}

inline void swap(ostrstream& _Left, ostrstream&& _Right)
	{	// swap _Left and _Right ostrstreams
	typedef ostrstream _Myt;
	_Left.swap(_STD forward<_Myt>(_Right));
	}

inline void swap(ostrstream&& _Left, ostrstream& _Right)
	{	// swap _Left and _Right ostrstreams
	typedef ostrstream _Myt;
	_Right.swap(_STD forward<_Myt>(_Left));
	}

		// CLASS strstream
class strstream
	: public iostream
	{	// input/output stream associated with character array buffer
public:
	typedef strstream _Myt;
	typedef iostream _Mybase;
	typedef strstreambuf _Mysb;

	typedef char char_type;
	typedef int int_type;
	typedef streampos pos_type;
	typedef streamoff off_type;

	__CLR_OR_THIS_CALL strstream()
		: _Mybase(&_Strbuffer), _Strbuffer()
		{	// construct with empty character array
		}

	__CLR_OR_THIS_CALL strstream(char *_Ptr,
		streamsize _Count,
		ios_base::openmode _Mode =
			ios_base::in | ios_base::out)
		: iostream(&_Strbuffer),
			_Strbuffer(_Ptr, _Count,
				_Ptr == 0 || (_Mode & ios_base::app) == 0
					? _Ptr : _Ptr + _CSTD strlen(_Ptr))
		{	// construct with [_Ptr, _Ptr + _Count)
		}

	__CLR_OR_THIS_CALL strstream(_Myt&& _Right)
		: _Mybase(&_Strbuffer)
		{	// construct by moving _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		}

	_Myt& __CLR_OR_THIS_CALL operator=(_Myt&& _Right)
		{	// move from _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		return (*this);
		}

	void __CLR_OR_THIS_CALL _Assign_rv(_Myt&& _Right)
		{	// move from _Right
		if (this != &_Right)
			{	// different, swap base and buffer
			_Strbuffer.clear();
			this->swap(_Right);
			}
		}

	void __CLR_OR_THIS_CALL swap(_Myt& _Right)
		{	// swap with _Right
		if (this != &_Right)
			{	// different, swap base and buffer
			_Mybase::swap(_Right);
			_Strbuffer.swap(_Right._Strbuffer);
			}
		}

	void __CLR_OR_THIS_CALL swap(_Myt&& _Right)
		{	// swap with _Right
		_Assign_rv(_STD forward<_Myt>(_Right));
		}

	virtual __CLR_OR_THIS_CALL ~strstream()
		{	// destroy a strstream
		}

	_Mysb *__CLR_OR_THIS_CALL rdbuf() const
		{	// return pointer to character array buffer
		return ((_Mysb *)&_Strbuffer);
		}

	void __CLR_OR_THIS_CALL freeze(bool _Freezeit = true)
		{	// freeze or unfreeze writing
		_Strbuffer.freeze(_Freezeit);
		}

	char *__CLR_OR_THIS_CALL str()
		{	// freeze and return pointer to character array
		return (_Strbuffer.str());
		}

	streamsize __CLR_OR_THIS_CALL pcount() const
		{	// return size of writable character array
		return (_Strbuffer.pcount());
		}

private:
	_Mysb _Strbuffer;	// the string buffer
	};

	// strstream OPERATORS
inline void swap(strstream& _Left, strstream& _Right)
	{	// swap _Left and _Right strstreams
	_Left.swap(_Right);
	}

inline void swap(strstream& _Left, strstream&& _Right)
	{	// swap _Left and _Right strstreams
	typedef strstream _Myt;
	_Left.swap(_STD forward<_Myt>(_Right));
	}

inline void swap(strstream&& _Left, strstream& _Right)
	{	// swap _Left and _Right strstreams
	typedef strstream _Myt;
	_Right.swap(_STD forward<_Myt>(_Left));
	}
_STD_END

 #pragma pop_macro("new")

 #pragma warning(pop)
 #pragma pack(pop)

#endif /* RC_INVOKED */
#endif /* _STRSTREAM_ */

/*
 * Copyright (c) 1992-2009 by P.J. Plauger.  ALL RIGHTS RESERVED.
 * Consult your license regarding permissions and restrictions.
V5.20:0009 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -