Recovered from cvs revision 2007-05-06 16:04:00

This commit is contained in:
2007-05-07 01:05:00 +00:00
parent 0f3ea15c69
commit 4821ee87ce
9 changed files with 302 additions and 51 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.cpp,v 1.8 2007/05/05 16:32:46 bacon Exp $
* $Id: Awk.cpp,v 1.9 2007/05/06 06:55:05 bacon Exp $
*/
#include <ase/awk/Awk.hpp>
@ -9,6 +9,10 @@
namespace ASE
{
Awk::Source::Source (Mode mode): mode (mode)
{
}
Awk::Source::Mode Awk::Source::getMode () const
{
return this->mode;
@ -70,7 +74,7 @@ namespace ASE
return this->mode;
}
Awk::Awk (): awk (ASE_NULL),
Awk::Awk (): awk (ASE_NULL), functionMap (ASE_NULL),
sourceIn (Source::READ), sourceOut (Source::WRITE)
{
}
@ -82,7 +86,7 @@ namespace ASE
int Awk::parse ()
{
if (awk == ASE_NULL && open() == -1) return -1;
ASE_ASSERT (awk != ASE_NULL);
ase_awk_srcios_t srcios;
@ -95,11 +99,7 @@ namespace ASE
int Awk::run (const char_t* main, const char_t** args)
{
if (awk == ASE_NULL)
{
// TODO: SET ERROR INFO
return -1;
}
ASE_ASSERT (awk != ASE_NULL);
ase_awk_runios_t runios;
@ -117,6 +117,8 @@ namespace ASE
int Awk::open ()
{
ASE_ASSERT (awk == ASE_NULL && functionMap == ASE_NULL);
ase_awk_prmfns_t prmfns;
prmfns.mmgr.malloc = malloc;
@ -156,7 +158,8 @@ namespace ASE
return -1;
}
functionMap = ase_awk_map_open (this, 512, ASE_NULL, awk);
functionMap = ase_awk_map_open (
this, 512, freeFunctionMapValue, awk);
if (functionMap == ASE_NULL)
{
// TODO: set ERROR INFO -> ENOMEM...
@ -190,26 +193,63 @@ namespace ASE
pair = ase_awk_map_get (functionMap, name, len);
if (pair == ASE_NULL) return -1;
//ASE_AWK_PAIR_VAL(pair);
return 0;
FunctionHandler handler;
handler = *(FunctionHandler*)ASE_AWK_PAIR_VAL(pair);
return (this->*handler) ();
}
int Awk::addFunction (
const char_t* name, size_t minArgs, size_t maxArgs,
FunctionHandler handler)
{
void* p = ase_awk_addbfn (awk, name, ase_strlen(name),
ASE_ASSERT (awk != ASE_NULL);
FunctionHandler* tmp;
tmp = (FunctionHandler*)this->malloc (ASE_SIZEOF(handler));
if (tmp == ASE_NULL)
{
// TODO: SET ERROR INFO -> ENOMEM
return -1;
}
//ase_memcpy (tmp, &handler, ASE_SIZEOF(handler));
*tmp = handler;
size_t nameLen = ase_strlen(name);
void* p = ase_awk_addbfn (awk, name, nameLen,
0, minArgs, maxArgs, ASE_NULL,
functionHandler);
if (p == ASE_NULL)
{
this->free (tmp);
return -1;
}
//ase_memcpy (ASE_NULL, &handler, sizeof(handler));
return (p == ASE_NULL)? -1: 0;
ase_awk_pair_t* pair;
pair = ase_awk_map_put (functionMap, name, nameLen, tmp);
if (pair == ASE_NULL)
{
// TODO: SET ERROR INFO
ase_awk_delbfn (awk, name, nameLen);
this->free (tmp);
return -1;
}
return 0;
}
int Awk::deleteFunction (const char_t* name)
{
// TODO: open if it is not open....
return ase_awk_delbfn (awk, name, ase_strlen(name));
ASE_ASSERT (awk != ASE_NULL);
size_t nameLen = ase_strlen(name);
int n = ase_awk_delbfn (awk, name, nameLen);
if (n == 0) ase_awk_map_remove (functionMap, name, nameLen);
return n;
}
Awk::ssize_t Awk::sourceReader (
@ -348,6 +388,12 @@ namespace ASE
return awk->dispatchFunction (name, len);
}
void Awk::freeFunctionMapValue (void* owner, void* value)
{
Awk* awk = (Awk*)owner;
awk->free (value);
}
void* Awk::malloc (void* custom, size_t n)
{
return ((Awk*)custom)->malloc (n);

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.hpp,v 1.7 2007/05/05 16:32:46 bacon Exp $
* $Id: Awk.hpp,v 1.8 2007/05/06 06:55:05 bacon Exp $
*/
#ifndef _ASE_AWK_AWK_HPP_
@ -112,20 +112,21 @@ namespace ASE
Awk ();
virtual ~Awk ();
int parse ();
int run (const char_t* main, const char_t** args);
void close ();
virtual int open ();
virtual void close ();
virtual int parse ();
virtual int run (const char_t* main = ASE_NULL,
const char_t** args = ASE_NULL);
typedef int (Awk::*FunctionHandler) ();
int addFunction (
virtual int addFunction (
const char_t* name, size_t minArgs, size_t maxArgs,
FunctionHandler handler);
int deleteFunction (const char_t* main);
virtual int deleteFunction (const char_t* main);
protected:
int open ();
virtual int dispatchFunction (const char_t* name, size_t len);
@ -205,6 +206,7 @@ namespace ASE
static int functionHandler (
ase_awk_run_t* run, const char_t* name, size_t len);
static void freeFunctionMapValue (void* owner, void* value);
static void* malloc (void* custom, size_t n);
static void* realloc (void* custom, void* ptr, size_t n);

View File

@ -1,5 +1,5 @@
/*
* $Id: StdAwk.cpp,v 1.2 2007/05/05 16:32:46 bacon Exp $
* $Id: StdAwk.cpp,v 1.3 2007/05/06 06:55:05 bacon Exp $
*/
#include <ase/awk/StdAwk.hpp>
@ -9,9 +9,21 @@ namespace ASE
StdAwk::StdAwk ()
{
addFunction (ASE_T("sin"), 1, 1, (FunctionHandler)&StdAwk::sin);
addFunction (ASE_T("cos"), 1, 1, (FunctionHandler)&StdAwk::cos);
addFunction (ASE_T("tan"), 1, 1, (FunctionHandler)&StdAwk::tan);
}
int StdAwk::open ()
{
int n = Awk::open ();
if (n == 0)
{
/*
addFunction (ASE_T("sin"), 1, 1, (FunctionHandler)&StdAwk::sin);
addFunction (ASE_T("cos"), 1, 1, (FunctionHandler)&StdAwk::cos);
addFunction (ASE_T("tan"), 1, 1, (FunctionHandler)&StdAwk::tan);
*/
}
return n;
}
int StdAwk::sin ()

View File

@ -1,5 +1,5 @@
/*
* $Id: StdAwk.hpp,v 1.2 2007/05/05 16:32:46 bacon Exp $
* $Id: StdAwk.hpp,v 1.3 2007/05/06 06:55:05 bacon Exp $
*/
#ifndef _ASE_AWK_STDAWK_HPP_
@ -15,6 +15,8 @@ namespace ASE
public:
StdAwk ();
int open ();
protected:
int sin ();
int cos ();

View File

@ -1,5 +1,5 @@
#
# $Id: makefile.in,v 1.4 2007/05/02 15:07:33 bacon Exp $
# $Id: makefile.in,v 1.5 2007/05/06 04:23:44 bacon Exp $
#
NAME = aseawk
@ -51,7 +51,9 @@ OBJ_FILES_LIB = \
OBJ_FILES_JNI = $(TMP_DIR)/jni.o
OBJ_FILES_LIB_CXX = $(TMP_DIR)/cxx/Awk.o
OBJ_FILES_LIB_CXX = \
$(TMP_DIR)/cxx/Awk.o \
$(TMP_DIR)/cxx/StdAwk.o
OBJ_FILES_SO = $(OBJ_FILES_LIB:.o=.lo) $(OBJ_FILES_JNI:.o=.lo)
@ -136,6 +138,9 @@ $(TMP_DIR)/ase/awk/Exception.class:
$(TMP_DIR)/cxx/Awk.o: Awk.cpp Awk.hpp
$(CXX) $(CXXFLAGS) -o $@ -c Awk.cpp
$(TMP_DIR)/cxx/StdAwk.o: StdAwk.cpp StdAwk.hpp Awk.hpp
$(CXX) $(CXXFLAGS) -o $@ -c StdAwk.cpp
$(OUT_DIR):
mkdir -p $(OUT_DIR)

View File

@ -1,5 +1,5 @@
/*
* $Id: map.c,v 1.4 2007/05/05 16:32:46 bacon Exp $
* $Id: map.c,v 1.5 2007/05/06 06:55:05 bacon Exp $
*
* {License}
*/
@ -105,7 +105,8 @@ ase_awk_pair_t* ase_awk_map_get (
}
ase_awk_pair_t* ase_awk_map_put (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen, void* val)
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
void* val)
{
int n;
ase_awk_pair_t* px;
@ -116,7 +117,7 @@ ase_awk_pair_t* ase_awk_map_put (
}
int ase_awk_map_putx (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen,
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
void* val, ase_awk_pair_t** px)
{
ase_awk_pair_t* pair;
@ -165,7 +166,8 @@ int ase_awk_map_putx (
}
ase_awk_pair_t* ase_awk_map_set (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen, void* val)
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
void* val)
{
ase_awk_pair_t* pair;
ase_size_t hc;
@ -217,7 +219,7 @@ ase_awk_pair_t* ase_awk_map_setpair (
}
int ase_awk_map_remove (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen)
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen)
{
ase_awk_pair_t* pair, * prev;
ase_size_t hc;

View File

@ -1,5 +1,5 @@
/*
* $Id: map.h,v 1.4 2007/05/05 16:32:46 bacon Exp $
* $Id: map.h,v 1.5 2007/05/06 06:55:05 bacon Exp $
*
* {License}
*/
@ -60,14 +60,16 @@ ase_awk_pair_t* ase_awk_map_get (
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen);
ase_awk_pair_t* ase_awk_map_put (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen, void* val);
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
void* val);
int ase_awk_map_putx (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen,
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
void* val, ase_awk_pair_t** px);
ase_awk_pair_t* ase_awk_map_set (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen, void* val);
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
void* val);
ase_awk_pair_t* ase_awk_map_getpair (
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
@ -77,7 +79,7 @@ ase_awk_pair_t* ase_awk_map_setpair (
ase_awk_map_t* map, ase_awk_pair_t* pair, void* val);
int ase_awk_map_remove (
ase_awk_map_t* map, ase_char_t* keyptr, ase_size_t keylen);
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen);
int ase_awk_map_walk (ase_awk_map_t* map,
int (*walker)(ase_awk_pair_t*,void*), void* arg);