- 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.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.
|
||||
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);
|
||||
}
|
||||
|
||||
int Sed::execute (IOStream& iostream)
|
||||
int Sed::execute (Stream& iostream)
|
||||
{
|
||||
QSE_ASSERT (sed != QSE_NULL);
|
||||
|
||||
@ -136,7 +136,7 @@ Sed::ssize_t Sed::xin (
|
||||
{
|
||||
Sed* sed = *(Sed**)QSE_XTN(s);
|
||||
|
||||
IOStream::Data iodata (sed, IOStream::READ, arg);
|
||||
Stream::Data iodata (sed, Stream::READ, arg);
|
||||
|
||||
try
|
||||
{
|
||||
@ -163,7 +163,7 @@ Sed::ssize_t Sed::xout (
|
||||
{
|
||||
Sed* sed = *(Sed**)QSE_XTN(s);
|
||||
|
||||
IOStream::Data iodata (sed, IOStream::WRITE, arg);
|
||||
Stream::Data iodata (sed, Stream::WRITE, arg);
|
||||
|
||||
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.
|
||||
This file is part of QSE.
|
||||
@ -28,7 +28,7 @@
|
||||
QSE_BEGIN_NAMESPACE(QSE)
|
||||
/////////////////////////////////
|
||||
|
||||
int StdSed::StdStream::open (Data& io)
|
||||
int StdSed::FileStream::open (Data& io)
|
||||
{
|
||||
qse_sio_t* sio;
|
||||
const char_t* ioname = io.getName();
|
||||
@ -114,7 +114,7 @@ int StdSed::StdStream::open (Data& io)
|
||||
return 1;
|
||||
}
|
||||
|
||||
int StdSed::StdStream::close (Data& io)
|
||||
int StdSed::FileStream::close (Data& io)
|
||||
{
|
||||
qse_sio_t* sio = (qse_sio_t*)io.getHandle();
|
||||
|
||||
@ -125,7 +125,7 @@ int StdSed::StdStream::close (Data& io)
|
||||
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);
|
||||
|
||||
@ -146,7 +146,7 @@ StdSed::ssize_t StdSed::StdStream::read (Data& io, char_t* buf, size_t len)
|
||||
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);
|
||||
|
||||
@ -167,6 +167,142 @@ StdSed::ssize_t StdSed::StdStream::write (Data& io, const char_t* buf, size_t le
|
||||
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)
|
||||
/////////////////////////////////
|
||||
|
Reference in New Issue
Block a user