added code to the Sed class

This commit is contained in:
hyung-hwan 2009-05-26 07:39:18 +00:00
parent 2a4dd14b2a
commit b010320498
5 changed files with 136 additions and 26 deletions

View File

@ -19,8 +19,7 @@
#ifndef _QSE_MMGR_HPP_ #ifndef _QSE_MMGR_HPP_
#define _QSE_MMGR_HPP_ #define _QSE_MMGR_HPP_
#include <qse/types.h> #include <qse/Types.hpp>
#include <qse/macros.h>
///////////////////////////////// /////////////////////////////////
QSE_BEGIN_NAMESPACE(QSE) QSE_BEGIN_NAMESPACE(QSE)
@ -33,9 +32,16 @@ QSE_BEGIN_NAMESPACE(QSE)
* write code in more object-oriented fashion. An inheriting class should * write code in more object-oriented fashion. An inheriting class should
* implement three pure virtual functions. * implement three pure virtual functions.
*/ */
class Mmgr: public qse_mmgr_t class Mmgr: public Types, public qse_mmgr_t
{ {
public: public:
/** defines an alias type to qse_mmgr_t */
typedef qse_mmgr_t mmgr_t;
/**
* The Mmgr() function builds a memory manager composed of bridge
* functions connecting itself with it.
*/
Mmgr () throw () Mmgr () throw ()
{ {
this->alloc = alloc_mem; this->alloc = alloc_mem;
@ -44,6 +50,9 @@ public:
this->data = this; this->data = this;
} }
/**
* The ~Mmgr() function finalizes a memory manager.
*/
virtual ~Mmgr () {} virtual ~Mmgr () {}
protected: protected:

52
qse/include/qse/Types.hpp Normal file
View File

@ -0,0 +1,52 @@
/*
* $Id: Sed.hpp 127 2009-05-07 13:15:04Z baconevi $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#ifndef _QSE_TYPES_HPP_
#define _QSE_TYPES_HPP_
#include <qse/types.h>
#include <qse/macros.h>
/////////////////////////////////
QSE_BEGIN_NAMESPACE(QSE)
/////////////////////////////////
class Types
{
public:
/** boolean data type */
typedef qse_bool_t bool_t;
/** data type that can hold any character */
typedef qse_char_t char_t;
/** data type that can hold any character or an end-of-file value */
typedef qse_cint_t cint_t;
/** represents an unsigned integer number of the same size as void* */
typedef qse_size_t size_t;
/** signed version of size_t */
typedef qse_ssize_t ssize_t;
/** represents an integer */
typedef qse_long_t long_t;
/** represents a floating-point number */
typedef qse_real_t real_t;
};
/////////////////////////////////
QSE_END_NAMESPACE(QSE)
/////////////////////////////////
#endif

View File

@ -1,5 +1,5 @@
/* /*
* $Id: Awk.hpp 148 2009-05-20 10:44:47Z hyunghwan.chung $ * $Id: Awk.hpp 156 2009-05-25 13:39:18Z hyunghwan.chung $
* *
Copyright 2006-2009 Chung, Hyung-Hwan. Copyright 2006-2009 Chung, Hyung-Hwan.
@ -35,27 +35,10 @@ QSE_BEGIN_NAMESPACE(QSE)
class Awk: public Mmgr class Awk: public Mmgr
{ {
public: public:
/** Boolean data type */
typedef qse_bool_t bool_t;
/** Data type that can hold any character */
typedef qse_char_t char_t;
/** Data type that can hold any character or an end-of-file value */
typedef qse_cint_t cint_t;
/** Represents an unsigned integer number of the same size as void* */
typedef qse_size_t size_t;
/** Signed version of size_t */
typedef qse_ssize_t ssize_t;
/** Represents an integer */
typedef qse_long_t long_t;
/** Represents a floating-point number */
typedef qse_real_t real_t;
/** Represents the internal hash table */
typedef qse_map_t map_t; typedef qse_map_t map_t;
/** Represents a key/value pair */ /** Represents a key/value pair */
typedef qse_map_pair_t pair_t; typedef qse_map_pair_t pair_t;
typedef qse_mmgr_t mmgr_t;
/** Represents an internal awk value */ /** Represents an internal awk value */
typedef qse_awk_val_t val_t; typedef qse_awk_val_t val_t;

View File

@ -32,15 +32,31 @@ QSE_BEGIN_NAMESPACE(QSE)
class Sed: public Mmgr class Sed: public Mmgr
{ {
public: public:
typedef qse_sed_t sed_t;
typedef qse_sed_io_cmd_t sed_io_cmd_t;
typedef qse_sed_io_arg_t sed_io_arg_t;
Sed () throw (): sed (QSE_NULL) {} Sed () throw (): sed (QSE_NULL) {}
int open () throw (); int open () throw ();
void close () throw (); void close () throw ();
int compile () throw (); int compile (const char_t* sptr, size_t slen) throw ();
int execute () throw (); int execute () throw ();
protected: protected:
qse_sed_t* sed; sed_t* sed;
virtual int openIn (const char_t* path) = 0;
virtual int closeIn () = 0;
virtual ssize_t readIn (char_t* buf, size_t len) = 0;
virtual int openOut (const char_t* path) = 0;
virtual int closeOut () = 0;
virtual ssize_t writeOut (const char_t* buf, size_t len) = 0;
private:
static int xin (sed_t* s, sed_io_cmd_t cmd, sed_io_arg_t* arg);
static int xout (sed_t* s, sed_io_cmd_t cmd, sed_io_arg_t* arg);
}; };
///////////////////////////////// /////////////////////////////////

View File

@ -48,14 +48,64 @@ void Sed::close () throw()
} }
} }
int Sed::compile () throw () int Sed::compile (const char_t* sptr, size_t slen) throw ()
{ {
return 0; QSE_ASSERT (sed != QSE_NULL);
return qse_sed_comp (sed, sptr, slen);
} }
int Sed::execute () throw () int Sed::execute () throw ()
{ {
return 0; QSE_ASSERT (sed != QSE_NULL);
return qse_sed_exec (sed, xin, xout);
}
int Sed::xin (sed_t* s, sed_io_cmd_t cmd, sed_io_arg_t* arg)
{
Sed* sed = *(Sed**)QSE_XTN(s);
try
{
switch (cmd)
{
case QSE_SED_IO_OPEN:
return sed->openIn (arg->open.path);
case QSE_SED_IO_CLOSE:
return sed->closeIn ();
case QSE_SED_IO_READ:
return sed->readIn (arg->read.buf, arg->read.len);
default:
return -1;
}
}
catch (...)
{
return -1;
}
}
int Sed::xout (sed_t* s, sed_io_cmd_t cmd, sed_io_arg_t* arg)
{
Sed* sed = *(Sed**)QSE_XTN(s);
try
{
switch (cmd)
{
case QSE_SED_IO_OPEN:
return sed->openOut (arg->open.path);
case QSE_SED_IO_CLOSE:
return sed->closeOut ();
case QSE_SED_IO_READ:
return sed->writeOut (arg->write.data, arg->write.len);
default:
return -1;
}
}
catch (...)
{
return -1;
}
} }
///////////////////////////////// /////////////////////////////////