- renamed Sed::IOStream to Sed::Stream
- renamed StdSed::StdStream to StdSed::FileStream - added StdSed::StringStream
This commit is contained in:
		| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: Sed.hpp 318 2009-12-18 12:34:42Z hyunghwan.chung $ |  * $Id: Sed.hpp 319 2009-12-19 03:06:28Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|     Copyright 2006-2009 Chung, Hyung-Hwan. |     Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|     This file is part of QSE. |     This file is part of QSE. | ||||||
| @ -56,10 +56,10 @@ public: | |||||||
| 	typedef qse_sed_depth_t depth_t; | 	typedef qse_sed_depth_t depth_t; | ||||||
|  |  | ||||||
| 	/// | 	/// | ||||||
| 	/// The IOStream class is a base class for I/O operation during | 	/// The Stream class is a base class for I/O operation during | ||||||
| 	/// execution. | 	/// execution. | ||||||
| 	/// | 	/// | ||||||
| 	class IOStream: public Types | 	class Stream: public Types | ||||||
| 	{ | 	{ | ||||||
| 	public: | 	public: | ||||||
| 		enum Mode | 		enum Mode | ||||||
| @ -116,8 +116,8 @@ public: | |||||||
| 			io_arg_t* arg; | 			io_arg_t* arg; | ||||||
| 		}; | 		}; | ||||||
|  |  | ||||||
| 		IOStream () {} | 		Stream () {} | ||||||
| 		virtual ~IOStream () {} | 		virtual ~Stream () {} | ||||||
|  |  | ||||||
| 		virtual int open (Data& io) = 0; | 		virtual int open (Data& io) = 0; | ||||||
| 		virtual int close (Data& io) = 0; | 		virtual int close (Data& io) = 0; | ||||||
| @ -125,8 +125,8 @@ public: | |||||||
| 		virtual ssize_t write (Data& io, const char_t* buf, size_t len) = 0; | 		virtual ssize_t write (Data& io, const char_t* buf, size_t len) = 0; | ||||||
|  |  | ||||||
| 	private: | 	private: | ||||||
| 		IOStream (const IOStream&); | 		Stream (const Stream&); | ||||||
| 		IOStream& operator= (const IOStream&); | 		Stream& operator= (const Stream&); | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
| 	/// | 	/// | ||||||
| @ -179,7 +179,7 @@ public: | |||||||
| 	/// streams defined through I/O handlers | 	/// streams defined through I/O handlers | ||||||
| 	/// @return 0 on success, -1 on failure | 	/// @return 0 on success, -1 on failure | ||||||
| 	/// | 	/// | ||||||
| 	int execute (IOStream& iostream); | 	int execute (Stream& iostream); | ||||||
|  |  | ||||||
| 	/// | 	/// | ||||||
| 	/// The getOption() function gets the current options. | 	/// The getOption() function gets the current options. | ||||||
| @ -278,7 +278,7 @@ protected: | |||||||
| 	/// default error formatting string getter | 	/// default error formatting string getter | ||||||
| 	errstr_t dflerrstr;  | 	errstr_t dflerrstr;  | ||||||
| 	/// I/O stream to read data from and write output to. | 	/// I/O stream to read data from and write output to. | ||||||
| 	IOStream* iostream; | 	Stream* iostream; | ||||||
|  |  | ||||||
|  |  | ||||||
| private: | private: | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: StdSed.hpp 318 2009-12-18 12:34:42Z hyunghwan.chung $ |  * $Id: StdSed.hpp 319 2009-12-19 03:06:28Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|     Copyright 2006-2009 Chung, Hyung-Hwan. |     Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|     This file is part of QSE. |     This file is part of QSE. | ||||||
| @ -23,6 +23,7 @@ | |||||||
|  |  | ||||||
| #include <qse/sed/Sed.hpp> | #include <qse/sed/Sed.hpp> | ||||||
| #include <qse/cmn/StdMmgr.hpp> | #include <qse/cmn/StdMmgr.hpp> | ||||||
|  | #include <qse/cmn/str.h> | ||||||
|  |  | ||||||
| /** @file | /** @file | ||||||
|  * Standard Stream Editor |  * Standard Stream Editor | ||||||
| @ -42,10 +43,10 @@ class StdSed: public Sed | |||||||
| public: | public: | ||||||
| 	StdSed (Mmgr* mmgr = &StdMmgr::DFL): Sed (mmgr) {} | 	StdSed (Mmgr* mmgr = &StdMmgr::DFL): Sed (mmgr) {} | ||||||
|  |  | ||||||
| 	class StdStream: public IOStream | 	class FileStream: public Stream | ||||||
| 	{ | 	{ | ||||||
| 	public: | 	public: | ||||||
| 		StdStream (const char_t* infile = QSE_NULL, | 		FileStream (const char_t* infile = QSE_NULL, | ||||||
| 		            const char_t* outfile = QSE_NULL):  | 		            const char_t* outfile = QSE_NULL):  | ||||||
| 			infile(infile), outfile(outfile)  | 			infile(infile), outfile(outfile)  | ||||||
| 		{ | 		{ | ||||||
| @ -60,6 +61,36 @@ public: | |||||||
| 		const char_t* infile; | 		const char_t* infile; | ||||||
| 		const char_t* outfile; | 		const char_t* outfile; | ||||||
| 	}; | 	}; | ||||||
|  |  | ||||||
|  | 	class StringStream: public Stream | ||||||
|  | 	{ | ||||||
|  | 	public: | ||||||
|  | 		StringStream (const char_t* in); | ||||||
|  | 		StringStream (const char_t* in, size_t len); | ||||||
|  | 		~StringStream (); | ||||||
|  |  | ||||||
|  | 		int open (Data& io); | ||||||
|  | 		int close (Data& io); | ||||||
|  | 		ssize_t read (Data& io, char_t* buf, size_t len); | ||||||
|  | 		ssize_t write (Data& io, const char_t* buf, size_t len); | ||||||
|  |  | ||||||
|  | 		const char_t* getInput (size_t* len = QSE_NULL) const; | ||||||
|  | 		const char_t* getOutput (size_t* len = QSE_NULL) const; | ||||||
|  |  | ||||||
|  | 	protected: | ||||||
|  | 		struct | ||||||
|  | 		{ | ||||||
|  | 			const char_t* ptr;  | ||||||
|  | 			const char_t* end;  | ||||||
|  | 			const char_t* cur; | ||||||
|  | 		} in; | ||||||
|  |  | ||||||
|  | 		struct | ||||||
|  | 		{ | ||||||
|  | 			bool inited; | ||||||
|  | 			qse_str_t buf; | ||||||
|  | 		} out; | ||||||
|  | 	}; | ||||||
| }; | }; | ||||||
|  |  | ||||||
| /**  | /**  | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: Sed.cpp 318 2009-12-18 12:34:42Z hyunghwan.chung $ |  * $Id: Sed.cpp 319 2009-12-19 03:06:28Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|     Copyright 2006-2009 Chung, Hyung-Hwan. |     Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|     This file is part of QSE. |     This file is part of QSE. | ||||||
| @ -60,7 +60,7 @@ int Sed::compile (const char_t* sptr, size_t slen) | |||||||
| 	return qse_sed_comp (sed, sptr, slen); | 	return qse_sed_comp (sed, sptr, slen); | ||||||
| } | } | ||||||
|  |  | ||||||
| int Sed::execute (IOStream& iostream) | int Sed::execute (Stream& iostream) | ||||||
| { | { | ||||||
| 	QSE_ASSERT (sed != QSE_NULL); | 	QSE_ASSERT (sed != QSE_NULL); | ||||||
|  |  | ||||||
| @ -136,7 +136,7 @@ Sed::ssize_t Sed::xin ( | |||||||
| { | { | ||||||
| 	Sed* sed = *(Sed**)QSE_XTN(s); | 	Sed* sed = *(Sed**)QSE_XTN(s); | ||||||
|  |  | ||||||
| 	IOStream::Data iodata (sed, IOStream::READ, arg); | 	Stream::Data iodata (sed, Stream::READ, arg); | ||||||
|  |  | ||||||
| 	try | 	try | ||||||
| 	{ | 	{ | ||||||
| @ -163,7 +163,7 @@ Sed::ssize_t Sed::xout ( | |||||||
| { | { | ||||||
| 	Sed* sed = *(Sed**)QSE_XTN(s); | 	Sed* sed = *(Sed**)QSE_XTN(s); | ||||||
|  |  | ||||||
| 	IOStream::Data iodata (sed, IOStream::WRITE, arg); | 	Stream::Data iodata (sed, Stream::WRITE, arg); | ||||||
|  |  | ||||||
| 	try | 	try | ||||||
| 	{ | 	{ | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: StdSed.cpp 318 2009-12-18 12:34:42Z hyunghwan.chung $ |  * $Id: StdSed.cpp 319 2009-12-19 03:06:28Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|     Copyright 2006-2009 Chung, Hyung-Hwan. |     Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|     This file is part of QSE. |     This file is part of QSE. | ||||||
| @ -28,7 +28,7 @@ | |||||||
| QSE_BEGIN_NAMESPACE(QSE) | QSE_BEGIN_NAMESPACE(QSE) | ||||||
| ///////////////////////////////// | ///////////////////////////////// | ||||||
|  |  | ||||||
| int StdSed::StdStream::open (Data& io) | int StdSed::FileStream::open (Data& io) | ||||||
| { | { | ||||||
| 	qse_sio_t* sio; | 	qse_sio_t* sio; | ||||||
| 	const char_t* ioname = io.getName(); | 	const char_t* ioname = io.getName(); | ||||||
| @ -114,7 +114,7 @@ int StdSed::StdStream::open (Data& io) | |||||||
| 	return 1; | 	return 1; | ||||||
| } | } | ||||||
|  |  | ||||||
| int StdSed::StdStream::close (Data& io) | int StdSed::FileStream::close (Data& io) | ||||||
| { | { | ||||||
| 	qse_sio_t* sio = (qse_sio_t*)io.getHandle(); | 	qse_sio_t* sio = (qse_sio_t*)io.getHandle(); | ||||||
|  |  | ||||||
| @ -125,7 +125,7 @@ int StdSed::StdStream::close (Data& io) | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| StdSed::ssize_t StdSed::StdStream::read (Data& io, char_t* buf, size_t len) | StdSed::ssize_t StdSed::FileStream::read (Data& io, char_t* buf, size_t len) | ||||||
| { | { | ||||||
| 	ssize_t n = qse_sio_getsn ((qse_sio_t*)io.getHandle(), buf, len); | 	ssize_t n = qse_sio_getsn ((qse_sio_t*)io.getHandle(), buf, len); | ||||||
|  |  | ||||||
| @ -146,7 +146,7 @@ StdSed::ssize_t StdSed::StdStream::read (Data& io, char_t* buf, size_t len) | |||||||
| 	return n; | 	return n; | ||||||
| } | } | ||||||
|  |  | ||||||
| StdSed::ssize_t StdSed::StdStream::write (Data& io, const char_t* buf, size_t len) | StdSed::ssize_t StdSed::FileStream::write (Data& io, const char_t* buf, size_t len) | ||||||
| { | { | ||||||
| 	ssize_t n = qse_sio_putsn ((qse_sio_t*)io.getHandle(), buf, len); | 	ssize_t n = qse_sio_putsn ((qse_sio_t*)io.getHandle(), buf, len); | ||||||
|  |  | ||||||
| @ -167,6 +167,142 @@ StdSed::ssize_t StdSed::StdStream::write (Data& io, const char_t* buf, size_t le | |||||||
| 	return n; | 	return n; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | StdSed::StringStream::StringStream (const char_t* in) | ||||||
|  | { | ||||||
|  | 	this->in.ptr = in;  | ||||||
|  | 	this->in.end = in + qse_strlen(in); | ||||||
|  | 	this->out.inited = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | StdSed::StringStream::StringStream (const char_t* in, size_t len) | ||||||
|  | { | ||||||
|  | 	this->in.ptr = in;  | ||||||
|  | 	this->in.end = in + len; | ||||||
|  | 	this->out.inited = false; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | StdSed::StringStream::~StringStream () | ||||||
|  | { | ||||||
|  | 	if (out.inited) qse_str_fini (&out.buf); | ||||||
|  | } | ||||||
|  | 	 | ||||||
|  | int StdSed::StringStream::open (Data& io) | ||||||
|  | { | ||||||
|  | 	const char_t* ioname = io.getName (); | ||||||
|  |  | ||||||
|  | 	if (ioname == QSE_NULL) | ||||||
|  | 	{ | ||||||
|  | 		// open a main data stream | ||||||
|  | 		if (io.getMode() == READ)  | ||||||
|  | 		{ | ||||||
|  | 			in.cur = in.ptr; | ||||||
|  | 			io.setHandle ((void*)in.ptr); | ||||||
|  | 		} | ||||||
|  | 		else | ||||||
|  | 		{ | ||||||
|  | 			if (!out.inited) | ||||||
|  | 			{ | ||||||
|  | 				if (qse_str_init (&out.buf, ((Sed*)io)->getMmgr(), 256) == QSE_NULL) | ||||||
|  | 				{ | ||||||
|  | 					((Sed*)io)->setError (QSE_SED_ENOMEM); | ||||||
|  | 					return -1; | ||||||
|  | 				} | ||||||
|  |  | ||||||
|  | 				out.inited = true; | ||||||
|  | 			} | ||||||
|  |  | ||||||
|  | 			qse_str_clear (&out.buf); | ||||||
|  | 			io.setHandle (&out.buf); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		// open files for a r or w command | ||||||
|  | 		qse_sio_t* sio; | ||||||
|  | 		int mode = (io.getMode() == READ)? | ||||||
|  | 			QSE_SIO_READ:  | ||||||
|  | 			(QSE_SIO_WRITE|QSE_SIO_CREATE|QSE_SIO_TRUNCATE); | ||||||
|  |  | ||||||
|  | 		sio = qse_sio_open (((Sed*)io)->getMmgr(), 0, ioname, mode); | ||||||
|  | 		if (sio == QSE_NULL) return -1; | ||||||
|  |  | ||||||
|  | 		io.setHandle (sio); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return 1; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | int StdSed::StringStream::close (Data& io) | ||||||
|  | { | ||||||
|  | 	const void* handle = io.getHandle(); | ||||||
|  | 	if (handle != in.ptr && handle != &out.buf) | ||||||
|  | 		qse_sio_close ((qse_sio_t*)handle); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | StdSed::ssize_t StdSed::StringStream::read (Data& io, char_t* buf, size_t len) | ||||||
|  | { | ||||||
|  | 	const void* handle = io.getHandle(); | ||||||
|  |  | ||||||
|  | 	if (len == (size_t)-1) len--; // shrink buffer if too long | ||||||
|  | 	if (handle == in.ptr) | ||||||
|  | 	{ | ||||||
|  | 		size_t n = 0; | ||||||
|  | 		while (in.cur < in.end && n < len) | ||||||
|  | 			buf[n++] = *in.cur++; | ||||||
|  | 		return (ssize_t)n; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		QSE_ASSERT (handle != &out.buf); | ||||||
|  | 		return qse_sio_getsn ((qse_sio_t*)handle, buf, len); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | StdSed::ssize_t StdSed::StringStream::write (Data& io, const char_t* data, size_t len) | ||||||
|  | { | ||||||
|  | 	const void* handle = io.getHandle(); | ||||||
|  |  | ||||||
|  | 	if (len == (qse_size_t)-1) len--; // shrink data if too long | ||||||
|  |  | ||||||
|  | 	if (handle == &out.buf) | ||||||
|  | 	{ | ||||||
|  | 		if (qse_str_ncat (&out.buf, data, len) == (qse_size_t)-1) | ||||||
|  | 		{ | ||||||
|  | 			((Sed*)io)->setError (QSE_SED_ENOMEM); | ||||||
|  | 			return -1; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		return len; | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		QSE_ASSERT (handle != in.ptr); | ||||||
|  | 		return qse_sio_putsn ((qse_sio_t*)handle, data, len); | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const StdSed::char_t* StdSed::StringStream::getInput (size_t* len) const | ||||||
|  | { | ||||||
|  | 	if (len) *len = in.end - in.ptr; | ||||||
|  | 	return in.ptr; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | const StdSed::char_t* StdSed::StringStream::getOutput (size_t* len) const | ||||||
|  | { | ||||||
|  | 	if (out.inited) | ||||||
|  | 	{ | ||||||
|  | 		if (len) *len = QSE_STR_LEN(&out.buf); | ||||||
|  | 		return QSE_STR_PTR(&out.buf); | ||||||
|  | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		static char_t empty[] = QSE_T(""); | ||||||
|  | 		if (len) *len = 0; | ||||||
|  | 		return empty; | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  |  | ||||||
| ///////////////////////////////// | ///////////////////////////////// | ||||||
| QSE_END_NAMESPACE(QSE) | QSE_END_NAMESPACE(QSE) | ||||||
| ///////////////////////////////// | ///////////////////////////////// | ||||||
|  | |||||||
| @ -54,7 +54,7 @@ int sed_main (int argc, qse_char_t* argv[]) | |||||||
|  |  | ||||||
| 	qse_char_t* infile = (argc >= 3)? argv[2]: QSE_NULL; | 	qse_char_t* infile = (argc >= 3)? argv[2]: QSE_NULL; | ||||||
| 	qse_char_t* outfile = (argc >= 4)? argv[3]: QSE_NULL; | 	qse_char_t* outfile = (argc >= 4)? argv[3]: QSE_NULL; | ||||||
| 	QSE::StdSed::StdStream stream (infile, outfile); | 	QSE::StdSed::FileStream stream (infile, outfile); | ||||||
|  |  | ||||||
| 	if (sed.execute (stream) == -1) | 	if (sed.execute (stream) == -1) | ||||||
| 	{ | 	{ | ||||||
|  | |||||||
| @ -21,8 +21,6 @@ | |||||||
| #include <qse/sed/StdSed.hpp> | #include <qse/sed/StdSed.hpp> | ||||||
| #include <qse/cmn/main.h> | #include <qse/cmn/main.h> | ||||||
| #include <qse/cmn/sio.h> | #include <qse/cmn/sio.h> | ||||||
|  |  | ||||||
| #include <string> |  | ||||||
| #include <iostream> | #include <iostream> | ||||||
|  |  | ||||||
| #ifdef QSE_CHAR_IS_MCHAR | #ifdef QSE_CHAR_IS_MCHAR | ||||||
| @ -31,116 +29,12 @@ | |||||||
| #	define xcout std::wcout | #	define xcout std::wcout | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
| // |  | ||||||
| // The StringStream class implements a data I/O stream over strings. |  | ||||||
| // |  | ||||||
| class StringStream: public QSE::StdSed::IOStream |  | ||||||
| { |  | ||||||
| public: |  | ||||||
| 	StringStream (const char_t* in) { this->in.ptr = in; } |  | ||||||
| 	 |  | ||||||
| 	int open (Data& io) |  | ||||||
| 	{ |  | ||||||
| 		const char_t* ioname = io.getName (); |  | ||||||
|  |  | ||||||
| 		if (ioname == QSE_NULL) |  | ||||||
| 		{ |  | ||||||
| 			// open a main data stream |  | ||||||
| 			if (io.getMode() == READ)  |  | ||||||
| 			{ |  | ||||||
| 				in.cur = in.ptr; |  | ||||||
| 				io.setHandle ((void*)in.ptr); |  | ||||||
| 			} |  | ||||||
| 			else |  | ||||||
| 			{ |  | ||||||
| 				out.erase (); |  | ||||||
| 				io.setHandle (&out); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			// open files for a r or w command |  | ||||||
| 			qse_sio_t* sio; |  | ||||||
| 			int mode = (io.getMode() == READ)? |  | ||||||
| 				QSE_SIO_READ:  |  | ||||||
| 				(QSE_SIO_WRITE|QSE_SIO_CREATE|QSE_SIO_TRUNCATE); |  | ||||||
|  |  | ||||||
| 			sio = qse_sio_open (((QSE::Sed*)io)->getMmgr(), 0, ioname, mode); |  | ||||||
| 			if (sio == QSE_NULL) return -1; |  | ||||||
|  |  | ||||||
| 			io.setHandle (sio); |  | ||||||
| 		} |  | ||||||
|  |  | ||||||
| 		return 1; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	int close (Data& io) |  | ||||||
| 	{ |  | ||||||
| 		const void* handle = io.getHandle(); |  | ||||||
| 		if (handle != in.ptr && handle != &out) |  | ||||||
| 			qse_sio_close ((qse_sio_t*)handle); |  | ||||||
| 		return 0; |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ssize_t read (Data& io, char_t* buf, size_t len) |  | ||||||
| 	{ |  | ||||||
| 		const void* handle = io.getHandle(); |  | ||||||
| 		if (handle == in.ptr) |  | ||||||
| 		{ |  | ||||||
| 			ssize_t n = qse_strxcpy (buf, len, in.cur); |  | ||||||
| 			in.cur += n; return n; |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			QSE_ASSERT (handle != &out); |  | ||||||
| 			return qse_sio_getsn ((qse_sio_t*)handle, buf, len); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	ssize_t write (Data& io, const char_t* buf, size_t len) |  | ||||||
| 	{ |  | ||||||
| 		const void* handle = io.getHandle(); |  | ||||||
|  |  | ||||||
| 		if (handle == &out) |  | ||||||
| 		{ |  | ||||||
| 			try  |  | ||||||
| 			{ |  | ||||||
| 				out.append (buf, len); |  | ||||||
| 				return len;  |  | ||||||
| 			} |  | ||||||
| 			catch (...)  |  | ||||||
| 			{  |  | ||||||
| 				((QSE::Sed*)io)->setError (QSE_SED_ENOMEM);  |  | ||||||
| 				throw; |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		else |  | ||||||
| 		{ |  | ||||||
| 			QSE_ASSERT (handle != in.ptr); |  | ||||||
| 			return qse_sio_putsn ((qse_sio_t*)handle, buf, len); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
|  |  | ||||||
| 	const char_t* getInput () const { return in.ptr; } |  | ||||||
| 	const char_t* getOutput () const { return out.c_str (); } |  | ||||||
|  |  | ||||||
| protected: |  | ||||||
| 	struct |  | ||||||
| 	{ |  | ||||||
| 		const char_t* ptr;  |  | ||||||
| 		const char_t* cur; |  | ||||||
| 	} in; |  | ||||||
|  |  | ||||||
| 	std::basic_string<char_t> out; |  | ||||||
| }; |  | ||||||
|  |  | ||||||
| // | // | ||||||
| // The MySed class simplifies QSE::StdSed by utilizing exception handling. | // The MySed class simplifies QSE::StdSed by utilizing exception handling. | ||||||
| // | // | ||||||
| class MySed: protected QSE::StdSed | class MySed: protected QSE::StdSed | ||||||
| { | { | ||||||
| public: | public: | ||||||
| 	 |  | ||||||
| 	class Error | 	class Error | ||||||
| 	{  | 	{  | ||||||
| 	public: | 	public: | ||||||
| @ -159,7 +53,7 @@ public: | |||||||
| 			throw Error (getErrorMessage()); | 			throw Error (getErrorMessage()); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	void execute (IOStream& stream) | 	void execute (Stream& stream) | ||||||
| 	{ | 	{ | ||||||
| 		if (QSE::StdSed::execute (stream) <= -1) | 		if (QSE::StdSed::execute (stream) <= -1) | ||||||
| 			throw Error (getErrorMessage()); | 			throw Error (getErrorMessage()); | ||||||
| @ -174,7 +68,7 @@ int sed_main (int argc, qse_char_t* argv[]) | |||||||
|  |  | ||||||
| 		sed.compile (QSE_T("y/ABC/abc/;s/abc/def/g")); | 		sed.compile (QSE_T("y/ABC/abc/;s/abc/def/g")); | ||||||
|  |  | ||||||
| 		StringStream stream (QSE_T("ABCDEFabcdef")); | 		QSE::StdSed::StringStream stream (QSE_T("ABCDEFabcdef")); | ||||||
| 		sed.execute (stream); | 		sed.execute (stream); | ||||||
|  |  | ||||||
| 		xcout << QSE_T("INPUT: ") << stream.getInput() << std::endl; | 		xcout << QSE_T("INPUT: ") << stream.getInput() << std::endl; | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user