This commit is contained in:
parent
c17dc12bbd
commit
8f01118529
@ -418,7 +418,7 @@ int Awk::Argument::getIndexed (
|
||||
|
||||
// get the value from the map.
|
||||
ase_awk_val_map_t* m = (ase_awk_val_map_t*)this->val;
|
||||
ase_awk_pair_t* pair = ase_awk_map_get (m->map, idxptr, idxlen);
|
||||
pair_t* pair = ase_map_get (m->map, idxptr, idxlen);
|
||||
|
||||
// the key is not found. it is not an error. val is just nil
|
||||
if (pair == ASE_NULL) return 0;
|
||||
@ -462,7 +462,7 @@ int Awk::Argument::getIndexed (long_t idx, Argument& val) const
|
||||
|
||||
// get the value from the map.
|
||||
ase_awk_val_map_t* m = (ase_awk_val_map_t*)this->val;
|
||||
ase_awk_pair_t* pair = ase_awk_map_get (m->map, ri, rl);
|
||||
pair_t* pair = ase_map_get (m->map, ri, rl);
|
||||
|
||||
// the key is not found. it is not an error. val is just nil
|
||||
if (pair == ASE_NULL) return 0;
|
||||
@ -480,7 +480,7 @@ int Awk::Argument::getFirstIndex (Awk::Argument& val) const
|
||||
|
||||
ase_size_t buckno;
|
||||
ase_awk_val_map_t* m = (ase_awk_val_map_t*)this->val;
|
||||
ase_awk_pair_t* pair = ase_awk_map_getfirstpair (m->map, &buckno);
|
||||
pair_t* pair = ase_map_getfirstpair (m->map, &buckno);
|
||||
if (pair == ASE_NULL) return 0; // no more key
|
||||
|
||||
if (val.init (pair->key.ptr, pair->key.len) == -1) return -1;
|
||||
@ -501,10 +501,10 @@ int Awk::Argument::getNextIndex (Awk::Argument& val) const
|
||||
|
||||
ase_awk_val_map_t* m = (ase_awk_val_map_t*)this->val;
|
||||
|
||||
ase_awk_pair_t* pair = (ase_awk_pair_t*)this->str.ptr;
|
||||
pair_t* pair = (pair_t*)this->str.ptr;
|
||||
ase_size_t buckno = this->str.len;
|
||||
|
||||
pair = ase_awk_map_getnextpair (m->map, pair, &buckno);
|
||||
pair = ase_map_getnextpair (m->map, pair, &buckno);
|
||||
if (pair == ASE_NULL) return 0;
|
||||
|
||||
if (val.init (pair->key.ptr, pair->key.len) == -1) return -1;
|
||||
@ -617,7 +617,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
||||
|
||||
ase_awk_refupval (this->run->run, x2);
|
||||
|
||||
ase_awk_pair_t* pair = ase_awk_map_put (
|
||||
pair_t* pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)x)->map, idx, iln, x2);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -637,7 +637,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, long_t v)
|
||||
|
||||
ase_awk_refupval (this->run->run, x2);
|
||||
|
||||
ase_awk_pair_t* pair = ase_awk_map_put (
|
||||
pair_t* pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)this->val)->map, idx, iln, x2);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -678,7 +678,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
||||
|
||||
ase_awk_refupval (this->run->run, x2);
|
||||
|
||||
ase_awk_pair_t* pair = ase_awk_map_put (
|
||||
pair_t* pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)x)->map, idx, iln, x2);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -698,7 +698,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, real_t v)
|
||||
|
||||
ase_awk_refupval (this->run->run, x2);
|
||||
|
||||
ase_awk_pair_t* pair = ase_awk_map_put (
|
||||
pair_t* pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)this->val)->map, idx, iln, x2);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -739,7 +739,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, s
|
||||
|
||||
ase_awk_refupval (this->run->run, x2);
|
||||
|
||||
ase_awk_pair_t* pair = ase_awk_map_put (
|
||||
pair_t* pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)x)->map, idx, iln, x2);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -759,7 +759,7 @@ int Awk::Return::setIndexed (const char_t* idx, size_t iln, const char_t* str, s
|
||||
|
||||
ase_awk_refupval (this->run->run, x2);
|
||||
|
||||
ase_awk_pair_t* pair = ase_awk_map_put (
|
||||
pair_t* pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)this->val)->map, idx, iln, x2);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -1165,8 +1165,9 @@ int Awk::open ()
|
||||
return -1;
|
||||
}
|
||||
|
||||
functionMap = ase_awk_map_open (
|
||||
this, 512, 70, freeFunctionMapValue, ASE_NULL, awk);
|
||||
functionMap = ase_map_open (
|
||||
this, 512, 70, freeFunctionMapValue, ASE_NULL,
|
||||
ase_awk_getmmgr(awk));
|
||||
if (functionMap == ASE_NULL)
|
||||
{
|
||||
ase_awk_close (awk);
|
||||
@ -1192,7 +1193,7 @@ void Awk::close ()
|
||||
{
|
||||
if (functionMap != ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (functionMap);
|
||||
ase_map_close (functionMap);
|
||||
functionMap = ASE_NULL;
|
||||
}
|
||||
|
||||
@ -1376,7 +1377,7 @@ int Awk::dispatchFunction (Run* run, const char_t* name, size_t len)
|
||||
|
||||
//awk = ase_awk_getrunawk (run);
|
||||
|
||||
pair = ase_awk_map_get (functionMap, name, len);
|
||||
pair = ase_map_get (functionMap, name, len);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
run->setError (ERR_FNNONE, 0, name, len);
|
||||
@ -1384,7 +1385,7 @@ int Awk::dispatchFunction (Run* run, const char_t* name, size_t len)
|
||||
}
|
||||
|
||||
FunctionHandler handler;
|
||||
handler = *(FunctionHandler*)ASE_AWK_PAIR_VAL(pair);
|
||||
handler = *(FunctionHandler*)ASE_PAIR_VAL(pair);
|
||||
|
||||
size_t i, nargs = ase_awk_getnargs(run->run);
|
||||
|
||||
@ -1474,7 +1475,7 @@ int Awk::addFunction (
|
||||
return -1;
|
||||
}
|
||||
|
||||
pair_t* pair = ase_awk_map_put (functionMap, name, nameLen, tmp);
|
||||
pair_t* pair = ase_map_put (functionMap, name, nameLen, tmp);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
ase_awk_delfunc (awk, name, nameLen);
|
||||
@ -1494,7 +1495,7 @@ int Awk::deleteFunction (const char_t* name)
|
||||
size_t nameLen = ase_strlen(name);
|
||||
|
||||
int n = ase_awk_delfunc (awk, name, nameLen);
|
||||
if (n == 0) ase_awk_map_remove (functionMap, name, nameLen);
|
||||
if (n == 0) ase_map_remove (functionMap, name, nameLen);
|
||||
else retrieveError ();
|
||||
|
||||
return n;
|
||||
|
@ -8,7 +8,7 @@
|
||||
#define _ASE_AWK_AWK_HPP_
|
||||
|
||||
#include <ase/awk/awk.h>
|
||||
#include <ase/awk/map.h>
|
||||
#include <ase/cmn/map.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
/////////////////////////////////
|
||||
@ -35,12 +35,13 @@ public:
|
||||
typedef ase_long_t long_t;
|
||||
/** Represents a floating-point number */
|
||||
typedef ase_real_t real_t;
|
||||
/** Represents the internal hash table */
|
||||
typedef ase_map_t map_t;
|
||||
/** Represents a key/value pair */
|
||||
typedef ase_pair_t pair_t;
|
||||
|
||||
/** Represents an internal awk value */
|
||||
typedef ase_awk_val_t val_t;
|
||||
/** Represents the internal hash table */
|
||||
typedef ase_awk_map_t map_t;
|
||||
/** Represents a key/value pair */
|
||||
typedef ase_awk_pair_t pair_t;
|
||||
/** Represents the external I/O context */
|
||||
typedef ase_awk_extio_t extio_t;
|
||||
/** Represents the run-time context */
|
||||
|
@ -200,7 +200,6 @@
|
||||
<FILE FILENAME="err.c" CONTAINERID="CCompiler" LOCALCOMMAND="" UNITNAME="err" FORMNAME="" DESIGNCLASS=""/>
|
||||
<FILE FILENAME="extio.c" CONTAINERID="CCompiler" LOCALCOMMAND="" UNITNAME="extio" FORMNAME="" DESIGNCLASS=""/>
|
||||
<FILE FILENAME="func.c" CONTAINERID="CCompiler" LOCALCOMMAND="" UNITNAME="func" FORMNAME="" DESIGNCLASS=""/>
|
||||
<FILE FILENAME="map.c" CONTAINERID="CCompiler" LOCALCOMMAND="" UNITNAME="map" FORMNAME="" DESIGNCLASS=""/>
|
||||
<FILE FILENAME="misc.c" CONTAINERID="CCompiler" LOCALCOMMAND="" UNITNAME="misc" FORMNAME="" DESIGNCLASS=""/>
|
||||
<FILE FILENAME="parse.c" CONTAINERID="CCompiler" LOCALCOMMAND="" UNITNAME="parse" FORMNAME="" DESIGNCLASS=""/>
|
||||
<FILE FILENAME="rec.c" CONTAINERID="CCompiler" LOCALCOMMAND="" UNITNAME="rec" FORMNAME="" DESIGNCLASS=""/>
|
||||
|
@ -111,10 +111,6 @@ SOURCE=.\func.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\map.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\misc.c
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
@ -167,10 +163,6 @@ SOURCE=.\func.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\map.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
||||
SOURCE=.\parse.h
|
||||
# End Source File
|
||||
# Begin Source File
|
||||
|
@ -467,46 +467,6 @@
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="map.c"
|
||||
>
|
||||
<FileConfiguration
|
||||
Name="Release|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Release|x64"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|Win32"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
<FileConfiguration
|
||||
Name="Debug|x64"
|
||||
>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalIncludeDirectories=""
|
||||
PreprocessorDefinitions=""
|
||||
/>
|
||||
</FileConfiguration>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="misc.c"
|
||||
>
|
||||
@ -848,10 +808,6 @@
|
||||
RelativePath="func.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="map.h"
|
||||
>
|
||||
</File>
|
||||
<File
|
||||
RelativePath="parse.h"
|
||||
>
|
||||
|
135
ase/awk/awk.c
135
ase/awk/awk.c
@ -68,7 +68,8 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
awk->wtab = ase_awk_map_open (awk, 512, 70, free_word, ASE_NULL, awk);
|
||||
awk->wtab = ase_map_open (
|
||||
awk, 512, 70, free_word, ASE_NULL, &awk->prmfns.mmgr);
|
||||
if (awk->wtab == ASE_NULL)
|
||||
{
|
||||
ase_str_close (&awk->token.name);
|
||||
@ -76,44 +77,48 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
awk->rwtab = ase_awk_map_open (awk, 512, 70, free_word, ASE_NULL, awk);
|
||||
awk->rwtab = ase_map_open (
|
||||
awk, 512, 70, free_word, ASE_NULL, &awk->prmfns.mmgr);
|
||||
if (awk->rwtab == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
/* TODO: initial map size?? */
|
||||
awk->tree.afns = ase_awk_map_open (awk, 512, 70, free_afn, ASE_NULL, awk);
|
||||
awk->tree.afns = ase_map_open (
|
||||
awk, 512, 70, free_afn, ASE_NULL, &awk->prmfns.mmgr);
|
||||
if (awk->tree.afns == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
awk->parse.afns = ase_awk_map_open (awk, 256, 70, ASE_NULL, ASE_NULL, awk);
|
||||
awk->parse.afns = ase_map_open (
|
||||
awk, 256, 70, ASE_NULL, ASE_NULL, &awk->prmfns.mmgr);
|
||||
if (awk->parse.afns == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
awk->parse.named = ase_awk_map_open (awk, 256, 70, ASE_NULL, ASE_NULL, awk);
|
||||
awk->parse.named = ase_map_open (
|
||||
awk, 256, 70, ASE_NULL, ASE_NULL, &awk->prmfns.mmgr);
|
||||
if (awk->parse.named == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (awk->parse.afns);
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->parse.afns);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
@ -121,11 +126,11 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
|
||||
|
||||
if (ase_awk_tab_open (&awk->parse.globals, awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (awk->parse.named);
|
||||
ase_awk_map_close (awk->parse.afns);
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->parse.named);
|
||||
ase_map_close (awk->parse.afns);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
@ -134,11 +139,11 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
|
||||
if (ase_awk_tab_open (&awk->parse.locals, awk) == ASE_NULL)
|
||||
{
|
||||
ase_awk_tab_close (&awk->parse.globals);
|
||||
ase_awk_map_close (awk->parse.named);
|
||||
ase_awk_map_close (awk->parse.afns);
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->parse.named);
|
||||
ase_map_close (awk->parse.afns);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
@ -148,11 +153,11 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
|
||||
{
|
||||
ase_awk_tab_close (&awk->parse.locals);
|
||||
ase_awk_tab_close (&awk->parse.globals);
|
||||
ase_awk_map_close (awk->parse.named);
|
||||
ase_awk_map_close (awk->parse.afns);
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->parse.named);
|
||||
ase_map_close (awk->parse.afns);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
@ -191,17 +196,18 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
|
||||
|
||||
awk->bfn.sys = ASE_NULL;
|
||||
/*awk->bfn.user = ASE_NULL;*/
|
||||
awk->bfn.user = ase_awk_map_open (awk, 512, 70, free_bfn, ASE_NULL, awk);
|
||||
awk->bfn.user = ase_map_open (
|
||||
awk, 512, 70, free_bfn, ASE_NULL, &awk->prmfns.mmgr);
|
||||
if (awk->bfn.user == ASE_NULL)
|
||||
{
|
||||
ase_awk_tab_close (&awk->parse.params);
|
||||
ase_awk_tab_close (&awk->parse.locals);
|
||||
ase_awk_tab_close (&awk->parse.globals);
|
||||
ase_awk_map_close (awk->parse.named);
|
||||
ase_awk_map_close (awk->parse.afns);
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->parse.named);
|
||||
ase_map_close (awk->parse.afns);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
@ -222,15 +228,15 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data)
|
||||
|
||||
if (ase_awk_initglobals (awk) == -1)
|
||||
{
|
||||
ase_awk_map_close (awk->bfn.user);
|
||||
ase_map_close (awk->bfn.user);
|
||||
ase_awk_tab_close (&awk->parse.params);
|
||||
ase_awk_tab_close (&awk->parse.locals);
|
||||
ase_awk_tab_close (&awk->parse.globals);
|
||||
ase_awk_map_close (awk->parse.named);
|
||||
ase_awk_map_close (awk->parse.afns);
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->parse.named);
|
||||
ase_map_close (awk->parse.afns);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
ase_str_close (&awk->token.name);
|
||||
ASE_AWK_FREE (awk, awk);
|
||||
return ASE_NULL;
|
||||
@ -267,17 +273,17 @@ int ase_awk_close (ase_awk_t* awk)
|
||||
|
||||
if (ase_awk_clear (awk) == -1) return -1;
|
||||
/*ase_awk_clrbfn (awk);*/
|
||||
ase_awk_map_close (awk->bfn.user);
|
||||
ase_map_close (awk->bfn.user);
|
||||
|
||||
ase_awk_tab_close (&awk->parse.params);
|
||||
ase_awk_tab_close (&awk->parse.locals);
|
||||
ase_awk_tab_close (&awk->parse.globals);
|
||||
ase_awk_map_close (awk->parse.named);
|
||||
ase_awk_map_close (awk->parse.afns);
|
||||
ase_map_close (awk->parse.named);
|
||||
ase_map_close (awk->parse.afns);
|
||||
|
||||
ase_awk_map_close (awk->tree.afns);
|
||||
ase_awk_map_close (awk->rwtab);
|
||||
ase_awk_map_close (awk->wtab);
|
||||
ase_map_close (awk->tree.afns);
|
||||
ase_map_close (awk->rwtab);
|
||||
ase_map_close (awk->wtab);
|
||||
|
||||
ase_str_close (&awk->token.name);
|
||||
|
||||
@ -316,8 +322,8 @@ int ase_awk_clear (ase_awk_t* awk)
|
||||
|
||||
ase_awk_tab_clear (&awk->parse.locals);
|
||||
ase_awk_tab_clear (&awk->parse.params);
|
||||
ase_awk_map_clear (awk->parse.named);
|
||||
ase_awk_map_clear (awk->parse.afns);
|
||||
ase_map_clear (awk->parse.named);
|
||||
ase_map_clear (awk->parse.afns);
|
||||
|
||||
awk->parse.nlocals_max = 0;
|
||||
awk->parse.depth.cur.block = 0;
|
||||
@ -332,7 +338,7 @@ int ase_awk_clear (ase_awk_t* awk)
|
||||
|
||||
awk->tree.cur_afn.ptr = ASE_NULL;
|
||||
awk->tree.cur_afn.len = 0;
|
||||
ase_awk_map_clear (awk->tree.afns);
|
||||
ase_map_clear (awk->tree.afns);
|
||||
|
||||
if (awk->tree.begin != ASE_NULL)
|
||||
{
|
||||
@ -379,6 +385,11 @@ void ase_awk_setoption (ase_awk_t* awk, int opt)
|
||||
awk->option = opt;
|
||||
}
|
||||
|
||||
ase_mmgr_t* ase_awk_getmmgr (ase_awk_t* awk)
|
||||
{
|
||||
return &awk->prmfns.mmgr;
|
||||
}
|
||||
|
||||
void* ase_awk_getcustomdata (ase_awk_t* awk)
|
||||
{
|
||||
return awk->custom_data;
|
||||
@ -393,9 +404,9 @@ int ase_awk_getword (ase_awk_t* awk,
|
||||
const ase_char_t* okw, ase_size_t olen,
|
||||
const ase_char_t** nkw, ase_size_t* nlen)
|
||||
{
|
||||
ase_awk_pair_t* p;
|
||||
ase_pair_t* p;
|
||||
|
||||
p = ase_awk_map_get (awk->wtab, okw, olen);
|
||||
p = ase_map_get (awk->wtab, okw, olen);
|
||||
if (p == ASE_NULL) return -1;
|
||||
|
||||
*nkw = ((ase_cstr_t*)p->val)->ptr;
|
||||
@ -412,23 +423,23 @@ int ase_awk_setword (ase_awk_t* awk,
|
||||
|
||||
if (nkw == ASE_NULL || nlen == 0)
|
||||
{
|
||||
ase_awk_pair_t* p;
|
||||
ase_pair_t* p;
|
||||
|
||||
if (okw == ASE_NULL || olen == 0)
|
||||
{
|
||||
/* clear the entire table */
|
||||
ase_awk_map_clear (awk->wtab);
|
||||
ase_awk_map_clear (awk->rwtab);
|
||||
ase_map_clear (awk->wtab);
|
||||
ase_map_clear (awk->rwtab);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* delete the word */
|
||||
p = ase_awk_map_get (awk->wtab, okw, olen);
|
||||
p = ase_map_get (awk->wtab, okw, olen);
|
||||
if (p != ASE_NULL)
|
||||
{
|
||||
ase_cstr_t* s = (ase_cstr_t*)p->val;
|
||||
ase_awk_map_remove (awk->rwtab, s->ptr, s->len);
|
||||
ase_awk_map_remove (awk->wtab, okw, olen);
|
||||
ase_map_remove (awk->rwtab, s->ptr, s->len);
|
||||
ase_map_remove (awk->wtab, okw, olen);
|
||||
return 0;
|
||||
}
|
||||
else
|
||||
@ -467,7 +478,7 @@ int ase_awk_setword (ase_awk_t* awk,
|
||||
vo->ptr = (const ase_char_t*)(vo + 1);
|
||||
ase_strncpy ((ase_char_t*)vo->ptr, okw, olen);
|
||||
|
||||
if (ase_awk_map_put (awk->wtab, okw, olen, vn) == ASE_NULL)
|
||||
if (ase_map_put (awk->wtab, okw, olen, vn) == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (awk, vo);
|
||||
ASE_AWK_FREE (awk, vn);
|
||||
@ -475,9 +486,9 @@ int ase_awk_setword (ase_awk_t* awk,
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (ase_awk_map_put (awk->rwtab, nkw, nlen, vo) == ASE_NULL)
|
||||
if (ase_map_put (awk->rwtab, nkw, nlen, vo) == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_remove (awk->wtab, okw, olen);
|
||||
ase_map_remove (awk->wtab, okw, olen);
|
||||
ASE_AWK_FREE (awk, vo);
|
||||
SETERR (awk, ASE_AWK_ENOMEM);
|
||||
return -1;
|
||||
|
@ -17,11 +17,11 @@
|
||||
|
||||
#include <ase/cmn/types.h>
|
||||
#include <ase/cmn/macros.h>
|
||||
#include <ase/cmn/map.h>
|
||||
|
||||
typedef struct ase_awk_t ase_awk_t;
|
||||
typedef struct ase_awk_run_t ase_awk_run_t;
|
||||
typedef struct ase_awk_val_t ase_awk_val_t;
|
||||
typedef struct ase_awk_map_t ase_awk_map_t;
|
||||
typedef struct ase_awk_extio_t ase_awk_extio_t;
|
||||
|
||||
typedef struct ase_awk_prmfns_t ase_awk_prmfns_t;
|
||||
@ -465,6 +465,7 @@ ase_awk_t* ase_awk_open (const ase_awk_prmfns_t* prmfns, void* custom_data);
|
||||
int ase_awk_close (ase_awk_t* awk);
|
||||
int ase_awk_clear (ase_awk_t* awk);
|
||||
|
||||
ase_mmgr_t* ase_awk_getmmgr (ase_awk_t* awk);
|
||||
void* ase_awk_getcustomdata (ase_awk_t* awk);
|
||||
|
||||
const ase_char_t* ase_awk_geterrstr (ase_awk_t* awk, int num);
|
||||
@ -617,7 +618,7 @@ int ase_awk_setofilename (
|
||||
|
||||
ase_awk_t* ase_awk_getrunawk (ase_awk_run_t* awk);
|
||||
void* ase_awk_getruncustomdata (ase_awk_run_t* awk);
|
||||
ase_awk_map_t* ase_awk_getrunnamedvarmap (ase_awk_run_t* awk);
|
||||
ase_map_t* ase_awk_getrunnamedvarmap (ase_awk_run_t* awk);
|
||||
|
||||
/* functions to manipulate the run-time error */
|
||||
int ase_awk_getrunerrnum (ase_awk_run_t* run);
|
||||
|
@ -9,13 +9,13 @@
|
||||
|
||||
#include <ase/cmn/mem.h>
|
||||
#include <ase/cmn/str.h>
|
||||
#include <ase/cmn/map.h>
|
||||
|
||||
typedef struct ase_awk_chain_t ase_awk_chain_t;
|
||||
typedef struct ase_awk_tree_t ase_awk_tree_t;
|
||||
|
||||
#include <ase/awk/awk.h>
|
||||
#include <ase/awk/rex.h>
|
||||
#include <ase/awk/map.h>
|
||||
#include <ase/awk/tree.h>
|
||||
#include <ase/awk/val.h>
|
||||
#include <ase/awk/func.h>
|
||||
@ -57,7 +57,7 @@ struct ase_awk_tree_t
|
||||
ase_size_t nglobals; /* total number of globals */
|
||||
ase_size_t nbglobals; /* number of intrinsic globals */
|
||||
ase_cstr_t cur_afn;
|
||||
ase_awk_map_t* afns; /* awk function map */
|
||||
ase_map_t* afns; /* awk function map */
|
||||
|
||||
ase_awk_nde_t* begin;
|
||||
ase_awk_nde_t* begin_tail;
|
||||
@ -81,9 +81,9 @@ struct ase_awk_t
|
||||
int option;
|
||||
|
||||
/* word table */
|
||||
ase_awk_map_t* wtab;
|
||||
ase_map_t* wtab;
|
||||
/* reverse word table */
|
||||
ase_awk_map_t* rwtab;
|
||||
ase_map_t* rwtab;
|
||||
|
||||
/* regular expression processing routines */
|
||||
ase_awk_rexfns_t* rexfns;
|
||||
@ -118,10 +118,10 @@ struct ase_awk_t
|
||||
} depth;
|
||||
|
||||
/* function calls */
|
||||
ase_awk_map_t* afns;
|
||||
ase_map_t* afns;
|
||||
|
||||
/* named variables */
|
||||
ase_awk_map_t* named;
|
||||
ase_map_t* named;
|
||||
|
||||
/* global variables */
|
||||
ase_awk_tab_t globals;
|
||||
@ -185,7 +185,7 @@ struct ase_awk_t
|
||||
struct
|
||||
{
|
||||
ase_awk_bfn_t* sys;
|
||||
ase_awk_map_t* user;
|
||||
ase_map_t* user;
|
||||
} bfn;
|
||||
|
||||
struct
|
||||
@ -236,7 +236,7 @@ struct ase_awk_chain_t
|
||||
struct ase_awk_run_t
|
||||
{
|
||||
int id;
|
||||
ase_awk_map_t* named;
|
||||
ase_map_t* named;
|
||||
|
||||
void** stack;
|
||||
ase_size_t stack_top;
|
||||
|
@ -98,7 +98,7 @@ void* ase_awk_addfunc (
|
||||
|
||||
bfn->handler = handler;
|
||||
|
||||
if (ase_awk_map_put (awk->bfn.user, name, name_len, bfn) == ASE_NULL)
|
||||
if (ase_map_put (awk->bfn.user, name, name_len, bfn) == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (awk, bfn);
|
||||
ase_awk_seterrnum (awk, ASE_AWK_ENOMEM);
|
||||
@ -111,7 +111,7 @@ void* ase_awk_addfunc (
|
||||
int ase_awk_delfunc (
|
||||
ase_awk_t* awk, const ase_char_t* name, ase_size_t name_len)
|
||||
{
|
||||
if (ase_awk_map_remove (awk->bfn.user, name, name_len) == -1)
|
||||
if (ase_map_remove (awk->bfn.user, name, name_len) == -1)
|
||||
{
|
||||
ase_cstr_t errarg;
|
||||
|
||||
@ -127,14 +127,14 @@ int ase_awk_delfunc (
|
||||
|
||||
void ase_awk_clrbfn (ase_awk_t* awk)
|
||||
{
|
||||
ase_awk_map_clear (awk->bfn.user);
|
||||
ase_map_clear (awk->bfn.user);
|
||||
}
|
||||
|
||||
ase_awk_bfn_t* ase_awk_getbfn (
|
||||
ase_awk_t* awk, const ase_char_t* name, ase_size_t len)
|
||||
{
|
||||
ase_awk_bfn_t* bfn;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
const ase_char_t* k;
|
||||
ase_size_t l;
|
||||
|
||||
@ -144,8 +144,7 @@ ase_awk_bfn_t* ase_awk_getbfn (
|
||||
if (bfn->valid != 0 &&
|
||||
(awk->option & bfn->valid) != bfn->valid) continue;
|
||||
|
||||
pair = ase_awk_map_get (
|
||||
awk->wtab, bfn->name.ptr, bfn->name.len);
|
||||
pair = ase_map_get (awk->wtab, bfn->name.ptr, bfn->name.len);
|
||||
if (pair != ASE_NULL)
|
||||
{
|
||||
/* found in the customized word table */
|
||||
@ -165,7 +164,7 @@ ase_awk_bfn_t* ase_awk_getbfn (
|
||||
* because I'm trying to support ase_awk_setword in
|
||||
* a very flimsy way here. Would it be better to drop
|
||||
* ase_awk_setword totally? */
|
||||
pair = ase_awk_map_get (awk->rwtab, name, len);
|
||||
pair = ase_map_get (awk->rwtab, name, len);
|
||||
if (pair != ASE_NULL)
|
||||
{
|
||||
/* the current name is a target name for
|
||||
@ -175,7 +174,7 @@ ase_awk_bfn_t* ase_awk_getbfn (
|
||||
}
|
||||
else
|
||||
{
|
||||
pair = ase_awk_map_get (awk->wtab, name, len);
|
||||
pair = ase_map_get (awk->wtab, name, len);
|
||||
if (pair != ASE_NULL)
|
||||
{
|
||||
k = ((ase_cstr_t*)(pair->val))->ptr;
|
||||
@ -203,7 +202,7 @@ ase_awk_bfn_t* ase_awk_getbfn (
|
||||
}
|
||||
/* END NOTE */
|
||||
|
||||
pair = ase_awk_map_get (awk->bfn.user, k, l);
|
||||
pair = ase_map_get (awk->bfn.user, k, l);
|
||||
if (pair == ASE_NULL) return ASE_NULL;
|
||||
|
||||
bfn = (ase_awk_bfn_t*)pair->val;
|
||||
@ -797,7 +796,7 @@ static int bfn_split (
|
||||
* it is decremented if the assignement fails. */
|
||||
ase_awk_refupval (run, t2);
|
||||
|
||||
if (ase_awk_map_putx (
|
||||
if (ase_map_putx (
|
||||
((ase_awk_val_map_t*)t1)->map,
|
||||
key, key_len, t2, ASE_NULL) == -1)
|
||||
{
|
||||
|
@ -2407,7 +2407,7 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Argument_getindexed (JNIEnv* env, jobject
|
||||
ase_awk_val_t* val = (ase_awk_val_t*)valid;
|
||||
ase_awk_t* awk = ase_awk_getrunawk (run);
|
||||
run_data_t* run_data = (run_data_t*)ase_awk_getruncustomdata (run);
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
jobject arg;
|
||||
|
||||
const jchar* ptr;
|
||||
@ -2433,7 +2433,7 @@ JNIEXPORT jobject JNICALL Java_ase_awk_Argument_getindexed (JNIEnv* env, jobject
|
||||
}
|
||||
else rptr = (ase_char_t*)ptr;
|
||||
|
||||
pair = ase_awk_map_get (((ase_awk_val_map_t*)val)->map, rptr, len);
|
||||
pair = ase_map_get (((ase_awk_val_map_t*)val)->map, rptr, len);
|
||||
if (ptr != rptr) ase_awk_free (awk, rptr);
|
||||
(*env)->ReleaseStringChars (env, index, ptr);
|
||||
|
||||
@ -2593,7 +2593,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobjec
|
||||
{
|
||||
ase_awk_val_t* x;
|
||||
ase_awk_val_t* x2;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
x = ase_awk_makemapval (run);
|
||||
if (x == ASE_NULL)
|
||||
@ -2622,7 +2622,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobjec
|
||||
return;
|
||||
}
|
||||
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)x)->map, aptr, len, x2);
|
||||
free_str (env, awk, index, jptr, aptr);
|
||||
if (pair == ASE_NULL)
|
||||
@ -2639,7 +2639,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobjec
|
||||
else
|
||||
{
|
||||
ase_awk_val_t* x2;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
x2 = ase_awk_makeintval (run, newval);
|
||||
if (x2 == ASE_NULL)
|
||||
@ -2656,7 +2656,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedintval (JNIEnv* env, jobjec
|
||||
THROW_NOMEM_EXCEPTION (env);
|
||||
return;
|
||||
}
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)val)->map, aptr, len, x2);
|
||||
free_str (env, awk, index, jptr, aptr);
|
||||
if (pair == ASE_NULL)
|
||||
@ -2696,7 +2696,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedrealval (JNIEnv* env, jobje
|
||||
{
|
||||
ase_awk_val_t* x;
|
||||
ase_awk_val_t* x2;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
x = ase_awk_makemapval (run);
|
||||
if (x == ASE_NULL)
|
||||
@ -2725,7 +2725,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedrealval (JNIEnv* env, jobje
|
||||
return;
|
||||
}
|
||||
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)x)->map, aptr, len, x2);
|
||||
free_str (env, awk, index, jptr, aptr);
|
||||
if (pair == ASE_NULL)
|
||||
@ -2742,7 +2742,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedrealval (JNIEnv* env, jobje
|
||||
else
|
||||
{
|
||||
ase_awk_val_t* x2;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
x2 = ase_awk_makerealval (run, newval);
|
||||
if (x2 == ASE_NULL)
|
||||
@ -2759,7 +2759,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedrealval (JNIEnv* env, jobje
|
||||
THROW_NOMEM_EXCEPTION (env);
|
||||
return;
|
||||
}
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)val)->map, aptr, len, x2);
|
||||
free_str (env, awk, index, jptr, aptr);
|
||||
if (pair == ASE_NULL)
|
||||
@ -2799,7 +2799,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedstrval (JNIEnv* env, jobjec
|
||||
{
|
||||
ase_awk_val_t* x;
|
||||
ase_awk_val_t* x2;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
x = ase_awk_makemapval (run);
|
||||
if (x == ASE_NULL)
|
||||
@ -2834,7 +2834,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedstrval (JNIEnv* env, jobjec
|
||||
THROW_NOMEM_EXCEPTION (env);
|
||||
return;
|
||||
}
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)x)->map, aptr, len, x2);
|
||||
free_str (env, awk, index, jptr, aptr);
|
||||
if (pair == ASE_NULL)
|
||||
@ -2851,7 +2851,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedstrval (JNIEnv* env, jobjec
|
||||
else
|
||||
{
|
||||
ase_awk_val_t* x2;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
if (get_str(env,awk,newval,&jptr,&aptr,&len) == -1)
|
||||
{
|
||||
@ -2874,7 +2874,7 @@ JNIEXPORT void JNICALL Java_ase_awk_Return_setindexedstrval (JNIEnv* env, jobjec
|
||||
THROW_NOMEM_EXCEPTION (env);
|
||||
return;
|
||||
}
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
((ase_awk_val_map_t*)val)->map, aptr, len, x2);
|
||||
free_str (env, awk, index, jptr, aptr);
|
||||
if (pair == ASE_NULL)
|
||||
|
@ -45,7 +45,6 @@ OBJ_FILES_LIB = \
|
||||
$(TMP_DIR)/err.o \
|
||||
$(TMP_DIR)/tree.o \
|
||||
$(TMP_DIR)/tab.o \
|
||||
$(TMP_DIR)/map.o \
|
||||
$(TMP_DIR)/parse.o \
|
||||
$(TMP_DIR)/run.o \
|
||||
$(TMP_DIR)/rec.o \
|
||||
@ -129,9 +128,6 @@ $(TMP_DIR)/tree.o: tree.c
|
||||
$(TMP_DIR)/tab.o: tab.c
|
||||
$(LIBTOOL_COMPILE) $(CC) $(CFLAGS) -o $@ -c tab.c
|
||||
|
||||
$(TMP_DIR)/map.o: map.c
|
||||
$(LIBTOOL_COMPILE) $(CC) $(CFLAGS) -o $@ -c map.c
|
||||
|
||||
$(TMP_DIR)/parse.o: parse.c
|
||||
$(LIBTOOL_COMPILE) $(CC) $(CFLAGS) -o $@ -c parse.c
|
||||
|
||||
|
112
ase/awk/map.h
112
ase/awk/map.h
@ -1,112 +0,0 @@
|
||||
/*
|
||||
* $Id: map.h,v 1.8 2007/09/30 15:12:20 bacon Exp $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
|
||||
#ifndef _ASE_AWK_MAP_H_
|
||||
#define _ASE_AWK_MAP_H_
|
||||
|
||||
#ifndef _ASE_AWK_AWK_H_
|
||||
#error Include <ase/awk/awk.h> first
|
||||
#endif
|
||||
|
||||
/*typedef struct ase_awk_map_t ase_awk_map_t;*/
|
||||
typedef struct ase_awk_pair_t ase_awk_pair_t;
|
||||
|
||||
struct ase_awk_pair_t
|
||||
{
|
||||
struct
|
||||
{
|
||||
ase_char_t* ptr;
|
||||
ase_size_t len;
|
||||
} key;
|
||||
|
||||
void* val;
|
||||
|
||||
/* used internally */
|
||||
ase_awk_pair_t* next;
|
||||
};
|
||||
|
||||
struct ase_awk_map_t
|
||||
{
|
||||
void* owner;
|
||||
ase_size_t size;
|
||||
ase_size_t capa;
|
||||
unsigned int factor;
|
||||
ase_size_t threshold;
|
||||
ase_awk_pair_t** buck;
|
||||
void (*freeval) (void*,void*);
|
||||
void (*sameval) (void*,void*);
|
||||
ase_awk_t* awk;
|
||||
};
|
||||
|
||||
#define ASE_AWK_PAIR_KEYPTR(p) ((p)->key.ptr)
|
||||
#define ASE_AWK_PAIR_KEYLEN(p) ((p)->key.len)
|
||||
#define ASE_AWK_PAIR_VAL(p) ((p)->val)
|
||||
#define ASE_AWK_PAIR_LNK(p) ((p)->next)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
ase_awk_map_t* ase_awk_map_open (
|
||||
void* owner, ase_size_t capa, unsigned int factor,
|
||||
void(*freeval)(void*,void*), void(*sameval)(void*,void*),
|
||||
ase_awk_t* awk);
|
||||
|
||||
void ase_awk_map_close (ase_awk_map_t* map);
|
||||
|
||||
void ase_awk_map_clear (ase_awk_map_t* map);
|
||||
|
||||
ase_size_t ase_awk_map_getsize (ase_awk_map_t* map);
|
||||
|
||||
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, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val);
|
||||
|
||||
int ase_awk_map_putx (
|
||||
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, 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,
|
||||
void** val);
|
||||
|
||||
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, 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);
|
||||
|
||||
/**
|
||||
* Gets the pointer to the first pair in the map.
|
||||
* @param map [in]
|
||||
* @param buckno [out]
|
||||
*/
|
||||
ase_awk_pair_t* ase_awk_map_getfirstpair (
|
||||
ase_awk_map_t* map, ase_size_t* buckno);
|
||||
/**
|
||||
* Gets the pointer to the next pair in the map.
|
||||
* @param map [in]
|
||||
* @param pair [in]
|
||||
* @param buckno [in out]
|
||||
*/
|
||||
ase_awk_pair_t* ase_awk_map_getnextpair (
|
||||
ase_awk_map_t* map, ase_awk_pair_t* pair, ase_size_t* buckno);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -50,7 +50,6 @@ OBJ_FILES_LIB = \
|
||||
$(TMP_DIR)\err.obj \
|
||||
$(TMP_DIR)\tree.obj \
|
||||
$(TMP_DIR)\tab.obj \
|
||||
$(TMP_DIR)\map.obj \
|
||||
$(TMP_DIR)\parse.obj \
|
||||
$(TMP_DIR)\run.obj \
|
||||
$(TMP_DIR)\rec.obj \
|
||||
@ -124,9 +123,6 @@ $(TMP_DIR)\tree.obj: tree.c
|
||||
$(TMP_DIR)\tab.obj: tab.c
|
||||
$(CC) $(CFLAGS) -o$@ -c tab.c
|
||||
|
||||
$(TMP_DIR)\map.obj: map.c
|
||||
$(CC) $(CFLAGS) -o$@ -c map.c
|
||||
|
||||
$(TMP_DIR)\parse.obj: parse.c
|
||||
$(CC) $(CFLAGS) -o$@ -c parse.c
|
||||
|
||||
|
@ -50,7 +50,6 @@ OBJ_FILES_LIB = \
|
||||
$(TMP_DIR)\err.obj \
|
||||
$(TMP_DIR)\tree.obj \
|
||||
$(TMP_DIR)\tab.obj \
|
||||
$(TMP_DIR)\map.obj \
|
||||
$(TMP_DIR)\parse.obj \
|
||||
$(TMP_DIR)\run.obj \
|
||||
$(TMP_DIR)\rec.obj \
|
||||
@ -134,9 +133,6 @@ $(TMP_DIR)\tree.obj: tree.c
|
||||
$(TMP_DIR)\tab.obj: tab.c
|
||||
$(CC) $(CFLAGS) /Fo$@ /c tab.c
|
||||
|
||||
$(TMP_DIR)\map.obj: map.c
|
||||
$(CC) $(CFLAGS) /Fo$@ /c map.c
|
||||
|
||||
$(TMP_DIR)\parse.obj: parse.c
|
||||
$(CC) $(CFLAGS) /Fo$@ /c parse.c
|
||||
|
||||
|
@ -26,7 +26,6 @@ OBJ_FILES_LIB = \
|
||||
$(TMP_DIR)\err.obj \
|
||||
$(TMP_DIR)\tree.obj \
|
||||
$(TMP_DIR)\tab.obj \
|
||||
$(TMP_DIR)\map.obj \
|
||||
$(TMP_DIR)\parse.obj \
|
||||
$(TMP_DIR)\run.obj \
|
||||
$(TMP_DIR)\rec.obj \
|
||||
@ -81,9 +80,6 @@ $(TMP_DIR)\tree.obj: tree.c
|
||||
$(TMP_DIR)\tab.obj: tab.c
|
||||
$(CC) $(CFLAGS) -o$@ -c tab.c
|
||||
|
||||
$(TMP_DIR)\map.obj: map.c
|
||||
$(CC) $(CFLAGS) -o$@ -c map.c
|
||||
|
||||
$(TMP_DIR)\parse.obj: parse.c
|
||||
$(CC) $(CFLAGS) -o$@ -c parse.c
|
||||
|
||||
|
@ -226,7 +226,7 @@ static int is_plain_var (ase_awk_nde_t* nde);
|
||||
static int is_var (ase_awk_nde_t* nde);
|
||||
|
||||
static int deparse (ase_awk_t* awk);
|
||||
static int deparse_func (ase_awk_pair_t* pair, void* arg);
|
||||
static int deparse_func (ase_pair_t* pair, void* arg);
|
||||
static int put_char (ase_awk_t* awk, ase_char_t c);
|
||||
static int flush_out (ase_awk_t* awk);
|
||||
|
||||
@ -443,11 +443,11 @@ const ase_char_t* ase_awk_getglobalname (
|
||||
|
||||
const ase_char_t* ase_awk_getkw (ase_awk_t* awk, const ase_char_t* kw)
|
||||
{
|
||||
ase_awk_pair_t* p;
|
||||
ase_pair_t* p;
|
||||
|
||||
ASE_ASSERT (kw != ASE_NULL);
|
||||
|
||||
p = ase_awk_map_get (awk->wtab, kw, ase_strlen(kw));
|
||||
p = ase_map_get (awk->wtab, kw, ase_strlen(kw));
|
||||
if (p != ASE_NULL) return ((ase_cstr_t*)p->val)->ptr;
|
||||
|
||||
return kw;
|
||||
@ -529,13 +529,13 @@ static int parse (ase_awk_t* awk)
|
||||
if ((awk->option & ASE_AWK_EXPLICIT) &&
|
||||
!(awk->option & ASE_AWK_IMPLICIT))
|
||||
{
|
||||
ase_awk_pair_t* p;
|
||||
ase_pair_t* p;
|
||||
ase_size_t buckno;
|
||||
|
||||
p = ase_awk_map_getfirstpair (awk->parse.afns, &buckno);
|
||||
p = ase_map_getfirstpair (awk->parse.afns, &buckno);
|
||||
while (p != ASE_NULL)
|
||||
{
|
||||
if (ase_awk_map_get (awk->tree.afns,
|
||||
if (ase_map_get (awk->tree.afns,
|
||||
p->key.ptr, p->key.len) == ASE_NULL)
|
||||
{
|
||||
/* TODO: set better error no & line */
|
||||
@ -548,7 +548,7 @@ static int parse (ase_awk_t* awk)
|
||||
goto exit_parse;
|
||||
}
|
||||
|
||||
p = ase_awk_map_getnextpair (awk->parse.afns, p, &buckno);
|
||||
p = ase_map_getnextpair (awk->parse.afns, p, &buckno);
|
||||
}
|
||||
|
||||
}
|
||||
@ -814,7 +814,7 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
||||
ase_awk_nde_t* body;
|
||||
ase_awk_afn_t* afn;
|
||||
ase_size_t nargs, g;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
int n;
|
||||
|
||||
/* eat up the keyword 'function' and get the next token */
|
||||
@ -839,7 +839,7 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
if (ase_awk_map_get(awk->tree.afns, name, name_len) != ASE_NULL)
|
||||
if (ase_map_get(awk->tree.afns, name, name_len) != ASE_NULL)
|
||||
{
|
||||
/* the function is defined previously */
|
||||
SETERRARG (
|
||||
@ -934,7 +934,7 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
||||
/* check if a parameter conflicts with a function
|
||||
* function f (f) { print f; } */
|
||||
if (ase_strxncmp (name_dup, name_len, param, param_len) == 0 ||
|
||||
ase_awk_map_get (awk->tree.afns, param, param_len) != ASE_NULL)
|
||||
ase_map_get (awk->tree.afns, param, param_len) != ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (awk, name_dup);
|
||||
ase_awk_tab_clear (&awk->parse.params);
|
||||
@ -1081,7 +1081,7 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
||||
afn->nargs = nargs;
|
||||
afn->body = body;
|
||||
|
||||
n = ase_awk_map_putx (awk->tree.afns, name_dup, name_len, afn, &pair);
|
||||
n = ase_map_putx (awk->tree.afns, name_dup, name_len, afn, &pair);
|
||||
if (n < 0)
|
||||
{
|
||||
ASE_AWK_FREE (awk, name_dup);
|
||||
@ -1095,12 +1095,12 @@ static ase_awk_nde_t* parse_function (ase_awk_t* awk)
|
||||
/* duplicate functions should have been detected previously */
|
||||
ASE_ASSERT (n != 0);
|
||||
|
||||
afn->name = ASE_AWK_PAIR_KEYPTR(pair); /* do some trick to save a string. */
|
||||
afn->name_len = ASE_AWK_PAIR_KEYLEN(pair);
|
||||
afn->name = ASE_PAIR_KEYPTR(pair); /* do some trick to save a string. */
|
||||
afn->name_len = ASE_PAIR_KEYLEN(pair);
|
||||
ASE_AWK_FREE (awk, name_dup);
|
||||
|
||||
/* remove the undefined function call entries from parse.afn table */
|
||||
ase_awk_map_remove (awk->parse.afns, afn->name, name_len);
|
||||
ase_map_remove (awk->parse.afns, afn->name, name_len);
|
||||
return body;
|
||||
}
|
||||
|
||||
@ -1418,9 +1418,9 @@ static void trans_global (
|
||||
*/
|
||||
if (index < awk->tree.nbglobals)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
pair = ase_awk_map_get (awk->wtab, word->ptr, word->len);
|
||||
pair = ase_map_get (awk->wtab, word->ptr, word->len);
|
||||
if (pair != ASE_NULL)
|
||||
{
|
||||
word->ptr = ((ase_cstr_t*)(pair->val))->ptr;
|
||||
@ -1465,7 +1465,7 @@ static int add_global (
|
||||
}
|
||||
|
||||
/* check if it conflict with a function name */
|
||||
if (ase_awk_map_get (awk->tree.afns, name, len) != ASE_NULL)
|
||||
if (ase_map_get (awk->tree.afns, name, len) != ASE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, ASE_AWK_EAFNRED, line,
|
||||
@ -1475,7 +1475,7 @@ static int add_global (
|
||||
|
||||
/* check if it conflict with a function name
|
||||
* caught in the function call table */
|
||||
if (ase_awk_map_get (awk->parse.afns, name, len) != ASE_NULL)
|
||||
if (ase_map_get (awk->parse.afns, name, len) != ASE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, ASE_AWK_EAFNRED, line,
|
||||
@ -1655,7 +1655,7 @@ static ase_awk_t* collect_locals (
|
||||
local, local_len) == 0);
|
||||
}
|
||||
|
||||
if (iscur || ase_awk_map_get (awk->tree.afns, local, local_len) != ASE_NULL)
|
||||
if (iscur || ase_map_get (awk->tree.afns, local, local_len) != ASE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||
@ -1665,7 +1665,7 @@ static ase_awk_t* collect_locals (
|
||||
|
||||
/* check if it conflict with a function name
|
||||
* caught in the function call table */
|
||||
if (ase_awk_map_get (awk->parse.afns, local, local_len) != ASE_NULL)
|
||||
if (ase_map_get (awk->parse.afns, local, local_len) != ASE_NULL)
|
||||
{
|
||||
SETERRARG (
|
||||
awk, ASE_AWK_EAFNRED, awk->token.line,
|
||||
@ -3238,7 +3238,7 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
|
||||
|
||||
if (awk->option & ASE_AWK_IMPLICIT)
|
||||
{
|
||||
if (ase_awk_map_get (awk->parse.named, name_dup, name_len) != ASE_NULL)
|
||||
if (ase_map_get (awk->parse.named, name_dup, name_len) != ASE_NULL)
|
||||
{
|
||||
/* a function call conflicts with a named variable */
|
||||
SETERRARG (awk, ASE_AWK_EVARRED, line, name_dup, name_len);
|
||||
@ -3289,14 +3289,14 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
|
||||
name_dup, name_len) == 0);
|
||||
}
|
||||
|
||||
if (iscur || ase_awk_map_get (awk->tree.afns, name_dup, name_len) != ASE_NULL)
|
||||
if (iscur || ase_map_get (awk->tree.afns, name_dup, name_len) != ASE_NULL)
|
||||
{
|
||||
/* the function is defined previously */
|
||||
SETERRARG (awk, ASE_AWK_EAFNRED, line, name_dup, name_len);
|
||||
goto exit_func;
|
||||
}
|
||||
|
||||
if (ase_awk_map_get (awk->parse.afns, name_dup, name_len) != ASE_NULL)
|
||||
if (ase_map_get (awk->parse.afns, name_dup, name_len) != ASE_NULL)
|
||||
{
|
||||
/* is it one of the function calls found so far? */
|
||||
SETERRARG (awk, ASE_AWK_EAFNRED, line, name_dup, name_len);
|
||||
@ -3315,7 +3315,7 @@ static ase_awk_nde_t* parse_primary_ident (ase_awk_t* awk, ase_size_t line)
|
||||
nde->idx = ASE_NULL;
|
||||
|
||||
/* collect unique instances of a named variables for reference */
|
||||
if (ase_awk_map_put (awk->parse.named,
|
||||
if (ase_map_put (awk->parse.named,
|
||||
name_dup, name_len, (void*)line) == ASE_NULL)
|
||||
{
|
||||
SETERRLIN (awk, ASE_AWK_ENOMEM, line);
|
||||
@ -3470,14 +3470,14 @@ static ase_awk_nde_t* parse_hashidx (
|
||||
name, name_len) == 0);
|
||||
}
|
||||
|
||||
if (iscur || ase_awk_map_get (awk->tree.afns, name, name_len) != ASE_NULL)
|
||||
if (iscur || ase_map_get (awk->tree.afns, name, name_len) != ASE_NULL)
|
||||
{
|
||||
/* the function is defined previously */
|
||||
SETERRARG (awk, ASE_AWK_EAFNRED, line, name, name_len);
|
||||
goto exit_func;
|
||||
}
|
||||
|
||||
if (ase_awk_map_get (awk->parse.afns, name, name_len) != ASE_NULL)
|
||||
if (ase_map_get (awk->parse.afns, name, name_len) != ASE_NULL)
|
||||
{
|
||||
/* is it one of the function calls found so far? */
|
||||
SETERRARG (awk, ASE_AWK_EAFNRED, line, name, name_len);
|
||||
@ -3629,7 +3629,7 @@ static ase_awk_nde_t* parse_fncall (
|
||||
|
||||
/* this line number might be truncated as
|
||||
* sizeof(line) could be > sizeof(void*) */
|
||||
if (ase_awk_map_put (awk->parse.afns,
|
||||
if (ase_map_put (awk->parse.afns,
|
||||
name, name_len, (void*)line) == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (awk, call);
|
||||
@ -5381,7 +5381,7 @@ static int classify_ident (
|
||||
ase_awk_t* awk, const ase_char_t* name, ase_size_t len)
|
||||
{
|
||||
kwent_t* kwp;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
for (kwp = kwtab; kwp->name != ASE_NULL; kwp++)
|
||||
{
|
||||
@ -5391,7 +5391,7 @@ static int classify_ident (
|
||||
if (kwp->valid != 0 &&
|
||||
(awk->option & kwp->valid) != kwp->valid) continue;
|
||||
|
||||
pair = ase_awk_map_get (awk->wtab, kwp->name, kwp->name_len);
|
||||
pair = ase_map_get (awk->wtab, kwp->name, kwp->name_len);
|
||||
if (pair != ASE_NULL)
|
||||
{
|
||||
k = ((ase_cstr_t*)(pair->val))->ptr;
|
||||
@ -5595,7 +5595,7 @@ static int deparse (ase_awk_t* awk)
|
||||
df.tmp = tmp;
|
||||
df.tmp_len = ASE_COUNTOF(tmp);
|
||||
|
||||
if (ase_awk_map_walk (awk->tree.afns, deparse_func, &df) == -1)
|
||||
if (ase_map_walk (awk->tree.afns, deparse_func, &df) == -1)
|
||||
{
|
||||
EXIT_DEPARSE ();
|
||||
}
|
||||
@ -5693,13 +5693,13 @@ exit_deparse:
|
||||
return n;
|
||||
}
|
||||
|
||||
static int deparse_func (ase_awk_pair_t* pair, void* arg)
|
||||
static int deparse_func (ase_pair_t* pair, void* arg)
|
||||
{
|
||||
struct deparse_func_t* df = (struct deparse_func_t*)arg;
|
||||
ase_awk_afn_t* afn = (ase_awk_afn_t*)pair->val;
|
||||
ase_size_t i, n;
|
||||
|
||||
ASE_ASSERT (ase_strxncmp (ASE_AWK_PAIR_KEYPTR(pair), ASE_AWK_PAIR_KEYLEN(pair), afn->name, afn->name_len) == 0);
|
||||
ASE_ASSERT (ase_strxncmp (ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair), afn->name, afn->name_len) == 0);
|
||||
|
||||
if (ase_awk_putsrcstr(df->awk,ase_awk_getkw(df->awk,ASE_T("function"))) == -1) return -1;
|
||||
if (ase_awk_putsrcstr (df->awk, ASE_T(" ")) == -1) return -1;
|
||||
|
@ -6,8 +6,8 @@
|
||||
|
||||
#include <ase/awk/awk_i.h>
|
||||
|
||||
static int __split_record (ase_awk_run_t* run);
|
||||
static int __recomp_record_fields (
|
||||
static int split_record (ase_awk_run_t* run);
|
||||
static int recomp_record_fields (
|
||||
ase_awk_run_t* run, ase_size_t lv,
|
||||
const ase_char_t* str, ase_size_t len);
|
||||
|
||||
@ -50,7 +50,7 @@ int ase_awk_setrec (
|
||||
run->inrec.d0 = v;
|
||||
ase_awk_refupval (run, v);
|
||||
|
||||
if (__split_record (run) == -1)
|
||||
if (split_record (run) == -1)
|
||||
{
|
||||
ase_awk_clrrec (run, ase_false);
|
||||
return -1;
|
||||
@ -58,7 +58,7 @@ int ase_awk_setrec (
|
||||
}
|
||||
else
|
||||
{
|
||||
if (__recomp_record_fields (run, idx, str, len) == -1)
|
||||
if (recomp_record_fields (run, idx, str, len) == -1)
|
||||
{
|
||||
ase_awk_clrrec (run, ase_false);
|
||||
return -1;
|
||||
@ -82,7 +82,7 @@ int ase_awk_setrec (
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __split_record (ase_awk_run_t* run)
|
||||
static int split_record (ase_awk_run_t* run)
|
||||
{
|
||||
ase_char_t* p, * tok;
|
||||
ase_size_t len, tok_len, nflds;
|
||||
@ -91,7 +91,7 @@ static int __split_record (ase_awk_run_t* run)
|
||||
ase_size_t fs_len;
|
||||
int errnum;
|
||||
|
||||
/* inrec should be cleared before __split_record is called */
|
||||
/* inrec should be cleared before split_record is called */
|
||||
ASE_ASSERT (run->inrec.nflds == 0);
|
||||
|
||||
/* get FS */
|
||||
@ -274,7 +274,7 @@ int ase_awk_clrrec (ase_awk_run_t* run, ase_bool_t skip_inrec_line)
|
||||
return n;
|
||||
}
|
||||
|
||||
static int __recomp_record_fields (
|
||||
static int recomp_record_fields (
|
||||
ase_awk_run_t* run, ase_size_t lv,
|
||||
const ase_char_t* str, ase_size_t len)
|
||||
{
|
||||
|
101
ase/awk/run.c
101
ase/awk/run.c
@ -601,7 +601,7 @@ void* ase_awk_getruncustomdata (ase_awk_run_t* run)
|
||||
return run->custom_data;
|
||||
}
|
||||
|
||||
ase_awk_map_t* ase_awk_getrunnamedvarmap (ase_awk_run_t* awk)
|
||||
ase_map_t* ase_awk_getrunnamedvarmap (ase_awk_run_t* awk)
|
||||
{
|
||||
return awk->named;
|
||||
}
|
||||
@ -624,7 +624,7 @@ int ase_awk_run (ase_awk_t* awk,
|
||||
awk->tree.begin == ASE_NULL &&
|
||||
awk->tree.end == ASE_NULL &&
|
||||
awk->tree.chain_size == 0 &&
|
||||
ase_awk_map_getsize(awk->tree.afns) == 0)
|
||||
ase_map_getsize(awk->tree.afns) == 0)
|
||||
{
|
||||
/* if not, deny the run */
|
||||
ase_awk_seterror (awk, ASE_AWK_ENOPER, 0, ASE_NULL, 0);
|
||||
@ -787,8 +787,9 @@ static int init_run (
|
||||
return -1;
|
||||
}
|
||||
|
||||
run->named = ase_awk_map_open (
|
||||
run, 1024, 70, free_namedval, same_namedval, run->awk);
|
||||
run->named = ase_map_open (
|
||||
run, 1024, 70, free_namedval, same_namedval,
|
||||
&run->awk->prmfns.mmgr);
|
||||
if (run->named == ASE_NULL)
|
||||
{
|
||||
ase_str_close (&run->format.fmt);
|
||||
@ -802,7 +803,7 @@ static int init_run (
|
||||
ASE_AWK_MALLOC (run->awk, 4096*ASE_SIZEOF(ase_char_t*));
|
||||
if (run->format.tmp.ptr == ASE_NULL)
|
||||
{
|
||||
ase_awk_map_close (run->named);
|
||||
ase_map_close (run->named);
|
||||
ase_str_close (&run->format.fmt);
|
||||
ase_str_close (&run->format.out);
|
||||
ase_str_close (&run->inrec.line);
|
||||
@ -819,7 +820,7 @@ static int init_run (
|
||||
if (run->pattern_range_state == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (run->awk, run->format.tmp.ptr);
|
||||
ase_awk_map_close (run->named);
|
||||
ase_map_close (run->named);
|
||||
ase_str_close (&run->format.fmt);
|
||||
ase_str_close (&run->format.out);
|
||||
ase_str_close (&run->inrec.line);
|
||||
@ -948,7 +949,7 @@ static void deinit_run (ase_awk_run_t* run)
|
||||
}
|
||||
|
||||
/* destroy named variables */
|
||||
ase_awk_map_close (run->named);
|
||||
ase_map_close (run->named);
|
||||
|
||||
/* destroy values in free list */
|
||||
while (run->fcache_count > 0)
|
||||
@ -1028,7 +1029,7 @@ static int build_runarg (
|
||||
* it has successfully been assigned into ARGV. */
|
||||
ase_awk_refupval (run, v_tmp);
|
||||
|
||||
if (ase_awk_map_putx (
|
||||
if (ase_map_putx (
|
||||
((ase_awk_val_map_t*)v_argv)->map,
|
||||
key, key_len, v_tmp, ASE_NULL) == -1)
|
||||
{
|
||||
@ -2195,13 +2196,13 @@ struct __foreach_walker_t
|
||||
ase_awk_nde_t* body;
|
||||
};
|
||||
|
||||
static int __walk_foreach (ase_awk_pair_t* pair, void* arg)
|
||||
static int __walk_foreach (ase_pair_t* pair, void* arg)
|
||||
{
|
||||
struct __foreach_walker_t* w = (struct __foreach_walker_t*)arg;
|
||||
ase_awk_val_t* str;
|
||||
|
||||
str = (ase_awk_val_t*) ase_awk_makestrval (
|
||||
w->run, ASE_AWK_PAIR_KEYPTR(pair), ASE_AWK_PAIR_KEYLEN(pair));
|
||||
w->run, ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair));
|
||||
if (str == ASE_NULL)
|
||||
{
|
||||
/* adjust the error line */
|
||||
@ -2231,7 +2232,7 @@ static int run_foreach (ase_awk_run_t* run, ase_awk_nde_foreach_t* nde)
|
||||
int n;
|
||||
ase_awk_nde_exp_t* test;
|
||||
ase_awk_val_t* rv;
|
||||
ase_awk_map_t* map;
|
||||
ase_map_t* map;
|
||||
struct __foreach_walker_t walker;
|
||||
|
||||
test = (ase_awk_nde_exp_t*)nde->test;
|
||||
@ -2260,7 +2261,7 @@ static int run_foreach (ase_awk_run_t* run, ase_awk_nde_foreach_t* nde)
|
||||
walker.run = run;
|
||||
walker.var = test->left;
|
||||
walker.body = nde->body;
|
||||
n = ase_awk_map_walk (map, __walk_foreach, &walker);
|
||||
n = ase_map_walk (map, __walk_foreach, &walker);
|
||||
|
||||
ase_awk_refdownval (run, rv);
|
||||
return n;
|
||||
@ -2447,14 +2448,14 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
|
||||
if (var->type == ASE_AWK_NDE_NAMED ||
|
||||
var->type == ASE_AWK_NDE_NAMEDIDX)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
ASE_ASSERTX (
|
||||
(var->type == ASE_AWK_NDE_NAMED && var->idx == ASE_NULL) ||
|
||||
(var->type == ASE_AWK_NDE_NAMEDIDX && var->idx != ASE_NULL),
|
||||
"if a named variable has an index part and a named indexed variable doesn't have an index part, the program is definitely wrong");
|
||||
|
||||
pair = ase_awk_map_get (
|
||||
pair = ase_map_get (
|
||||
run->named, var->id.name, var->id.name_len);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -2471,7 +2472,7 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
|
||||
return -1;
|
||||
}
|
||||
|
||||
pair = ase_awk_map_put (run->named,
|
||||
pair = ase_map_put (run->named,
|
||||
var->id.name, var->id.name_len, tmp);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -2491,7 +2492,7 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
|
||||
else
|
||||
{
|
||||
ase_awk_val_t* val;
|
||||
ase_awk_map_t* map;
|
||||
ase_map_t* map;
|
||||
|
||||
val = (ase_awk_val_t*)pair->val;
|
||||
ASE_ASSERT (val != ASE_NULL);
|
||||
@ -2546,12 +2547,12 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
|
||||
return -1;
|
||||
}
|
||||
|
||||
ase_awk_map_remove (map, key, keylen);
|
||||
ase_map_remove (map, key, keylen);
|
||||
if (key != buf) ASE_AWK_FREE (run->awk, key);
|
||||
}
|
||||
else
|
||||
{
|
||||
ase_awk_map_clear (map);
|
||||
ase_map_clear (map);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2618,7 +2619,7 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
|
||||
}
|
||||
else
|
||||
{
|
||||
ase_awk_map_t* map;
|
||||
ase_map_t* map;
|
||||
|
||||
if (val->type != ASE_AWK_VAL_MAP)
|
||||
{
|
||||
@ -2670,12 +2671,12 @@ static int run_delete (ase_awk_run_t* run, ase_awk_nde_delete_t* nde)
|
||||
run->errlin = var->line;
|
||||
return -1;
|
||||
}
|
||||
ase_awk_map_remove (map, key, keylen);
|
||||
ase_map_remove (map, key, keylen);
|
||||
if (key != buf) ASE_AWK_FREE (run->awk, key);
|
||||
}
|
||||
else
|
||||
{
|
||||
ase_awk_map_clear (map);
|
||||
ase_map_clear (map);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2707,7 +2708,7 @@ static int run_reset (ase_awk_run_t* run, ase_awk_nde_reset_t* nde)
|
||||
|
||||
/* a named variable can be reset if removed from a internal map
|
||||
to manage it */
|
||||
ase_awk_map_remove (run->named, var->id.name, var->id.name_len);
|
||||
ase_map_remove (run->named, var->id.name, var->id.name_len);
|
||||
}
|
||||
else if (var->type == ASE_AWK_NDE_GLOBAL ||
|
||||
var->type == ASE_AWK_NDE_LOCAL ||
|
||||
@ -3331,10 +3332,10 @@ static ase_awk_val_t* do_assignment_scalar (
|
||||
|
||||
if (var->type == ASE_AWK_NDE_NAMED)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
int n;
|
||||
|
||||
pair = ase_awk_map_get (
|
||||
pair = ase_map_get (
|
||||
run->named, var->id.name, var->id.name_len);
|
||||
if (pair != ASE_NULL &&
|
||||
((ase_awk_val_t*)pair->val)->type == ASE_AWK_VAL_MAP)
|
||||
@ -3351,7 +3352,7 @@ static ase_awk_val_t* do_assignment_scalar (
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
n = ase_awk_map_putx (run->named,
|
||||
n = ase_map_putx (run->named,
|
||||
var->id.name, var->id.name_len, val, ASE_NULL);
|
||||
if (n < 0)
|
||||
{
|
||||
@ -3435,8 +3436,8 @@ static ase_awk_val_t* do_assignment_map (
|
||||
|
||||
if (var->type == ASE_AWK_NDE_NAMEDIDX)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
pair = ase_awk_map_get (
|
||||
ase_pair_t* pair;
|
||||
pair = ase_map_get (
|
||||
run->named, var->id.name, var->id.name_len);
|
||||
map = (pair == ASE_NULL)?
|
||||
(ase_awk_val_map_t*)ase_awk_val_nil:
|
||||
@ -3468,8 +3469,8 @@ static ase_awk_val_t* do_assignment_map (
|
||||
{
|
||||
/* doesn't have to decrease the reference count
|
||||
* of the previous value here as it is done by
|
||||
* ase_awk_map_put */
|
||||
if (ase_awk_map_put (run->named,
|
||||
* ase_map_put */
|
||||
if (ase_map_put (run->named,
|
||||
var->id.name, var->id.name_len, tmp) == ASE_NULL)
|
||||
{
|
||||
ase_awk_refupval (run, tmp);
|
||||
@ -3531,7 +3532,7 @@ static ase_awk_val_t* do_assignment_map (
|
||||
str, (int)map->ref, (int)map->type);
|
||||
#endif
|
||||
|
||||
n = ase_awk_map_putx (map->map, str, len, val, ASE_NULL);
|
||||
n = ase_map_putx (map->map, str, len, val, ASE_NULL);
|
||||
if (n < 0)
|
||||
{
|
||||
if (str != idxbuf) ASE_AWK_FREE (run->awk, str);
|
||||
@ -3853,10 +3854,10 @@ static ase_awk_val_t* eval_binop_in (
|
||||
else if (rv->type == ASE_AWK_VAL_MAP)
|
||||
{
|
||||
ase_awk_val_t* res;
|
||||
ase_awk_map_t* map;
|
||||
ase_map_t* map;
|
||||
|
||||
map = ((ase_awk_val_map_t*)rv)->map;
|
||||
res = (ase_awk_map_get (map, str, len) == ASE_NULL)?
|
||||
res = (ase_map_get (map, str, len) == ASE_NULL)?
|
||||
ase_awk_val_zero: ase_awk_val_one;
|
||||
|
||||
if (str != idxbuf) ASE_AWK_FREE (run->awk, str);
|
||||
@ -5385,9 +5386,9 @@ static ase_awk_val_t* eval_afn_intrinsic (
|
||||
{
|
||||
ase_awk_nde_call_t* call = (ase_awk_nde_call_t*)nde;
|
||||
ase_awk_afn_t* afn;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
pair = ase_awk_map_get (run->awk->tree.afns,
|
||||
pair = ase_map_get (run->awk->tree.afns,
|
||||
call->what.afn.name.ptr, call->what.afn.name.len);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
@ -5741,16 +5742,16 @@ static int get_reference (
|
||||
|
||||
if (nde->type == ASE_AWK_NDE_NAMED)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
pair = ase_awk_map_get (
|
||||
pair = ase_map_get (
|
||||
run->named, tgt->id.name, tgt->id.name_len);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
/* it is bad that the named variable has to be
|
||||
* created in the function named "__get_refernce".
|
||||
* would there be any better ways to avoid this? */
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
run->named, tgt->id.name,
|
||||
tgt->id.name_len, ase_awk_val_nil);
|
||||
if (pair == ASE_NULL)
|
||||
@ -5786,13 +5787,13 @@ static int get_reference (
|
||||
|
||||
if (nde->type == ASE_AWK_NDE_NAMEDIDX)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
pair = ase_awk_map_get (
|
||||
pair = ase_map_get (
|
||||
run->named, tgt->id.name, tgt->id.name_len);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
run->named, tgt->id.name,
|
||||
tgt->id.name_len, ase_awk_val_nil);
|
||||
if (pair == ASE_NULL)
|
||||
@ -5875,7 +5876,7 @@ static int get_reference (
|
||||
static ase_awk_val_t** get_reference_indexed (
|
||||
ase_awk_run_t* run, ase_awk_nde_var_t* nde, ase_awk_val_t** val)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
ase_char_t* str;
|
||||
ase_size_t len;
|
||||
ase_char_t idxbuf[IDXBUFSIZE];
|
||||
@ -5914,10 +5915,10 @@ static ase_awk_val_t** get_reference_indexed (
|
||||
if (str == ASE_NULL) return ASE_NULL;
|
||||
}
|
||||
|
||||
pair = ase_awk_map_get ((*(ase_awk_val_map_t**)val)->map, str, len);
|
||||
pair = ase_map_get ((*(ase_awk_val_map_t**)val)->map, str, len);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
pair = ase_awk_map_put (
|
||||
pair = ase_map_put (
|
||||
(*(ase_awk_val_map_t**)val)->map,
|
||||
str, len, ase_awk_val_nil);
|
||||
if (pair == ASE_NULL)
|
||||
@ -6000,9 +6001,9 @@ static ase_awk_val_t* eval_rex (ase_awk_run_t* run, ase_awk_nde_t* nde)
|
||||
|
||||
static ase_awk_val_t* eval_named (ase_awk_run_t* run, ase_awk_nde_t* nde)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
pair = ase_awk_map_get (run->named,
|
||||
pair = ase_map_get (run->named,
|
||||
((ase_awk_nde_var_t*)nde)->id.name,
|
||||
((ase_awk_nde_var_t*)nde)->id.name_len);
|
||||
|
||||
@ -6027,7 +6028,7 @@ static ase_awk_val_t* eval_arg (ase_awk_run_t* run, ase_awk_nde_t* nde)
|
||||
static ase_awk_val_t* eval_indexed (
|
||||
ase_awk_run_t* run, ase_awk_nde_var_t* nde, ase_awk_val_t** val)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
ase_char_t* str;
|
||||
ase_size_t len;
|
||||
ase_char_t idxbuf[IDXBUFSIZE];
|
||||
@ -6066,7 +6067,7 @@ static ase_awk_val_t* eval_indexed (
|
||||
if (str == ASE_NULL) return ASE_NULL;
|
||||
}
|
||||
|
||||
pair = ase_awk_map_get ((*(ase_awk_val_map_t**)val)->map, str, len);
|
||||
pair = ase_map_get ((*(ase_awk_val_map_t**)val)->map, str, len);
|
||||
if (str != idxbuf) ASE_AWK_FREE (run->awk, str);
|
||||
|
||||
return (pair == ASE_NULL)? ase_awk_val_nil: (ase_awk_val_t*)pair->val;
|
||||
@ -6075,12 +6076,12 @@ static ase_awk_val_t* eval_indexed (
|
||||
static ase_awk_val_t* eval_namedidx (ase_awk_run_t* run, ase_awk_nde_t* nde)
|
||||
{
|
||||
ase_awk_nde_var_t* tgt = (ase_awk_nde_var_t*)nde;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
pair = ase_awk_map_get (run->named, tgt->id.name, tgt->id.name_len);
|
||||
pair = ase_map_get (run->named, tgt->id.name, tgt->id.name_len);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
pair = ase_awk_map_put (run->named,
|
||||
pair = ase_map_put (run->named,
|
||||
tgt->id.name, tgt->id.name_len, ase_awk_val_nil);
|
||||
if (pair == ASE_NULL)
|
||||
{
|
||||
|
@ -381,8 +381,8 @@ ase_awk_val_t* ase_awk_makemapval (ase_awk_run_t* run)
|
||||
|
||||
val->type = ASE_AWK_VAL_MAP;
|
||||
val->ref = 0;
|
||||
val->map = ase_awk_map_open (
|
||||
run, 256, 70, free_mapval, same_mapval, run->awk);
|
||||
val->map = ase_map_open (
|
||||
run, 256, 70, free_mapval, same_mapval, &run->awk->prmfns.mmgr);
|
||||
if (val->map == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (run->awk, val);
|
||||
@ -503,7 +503,7 @@ void ase_awk_freeval (ase_awk_run_t* run, ase_awk_val_t* val, ase_bool_t cache)
|
||||
}
|
||||
else if (val->type == ASE_AWK_VAL_MAP)
|
||||
{
|
||||
ase_awk_map_close (((ase_awk_val_map_t*)val)->map);
|
||||
ase_map_close (((ase_awk_val_map_t*)val)->map);
|
||||
ASE_AWK_FREE (run->awk, val);
|
||||
}
|
||||
else if (val->type == ASE_AWK_VAL_REF)
|
||||
@ -991,7 +991,7 @@ int ase_awk_strtonum (
|
||||
#define DPRINTF run->awk->prmfns.misc.dprintf
|
||||
#define DCUSTOM run->awk->prmfns.misc.custom_data
|
||||
|
||||
static int print_pair (ase_awk_pair_t* pair, void* arg)
|
||||
static int print_pair (ase_pair_t* pair, void* arg)
|
||||
{
|
||||
ase_awk_run_t* run = (ase_awk_run_t*)arg;
|
||||
|
||||
@ -1044,7 +1044,7 @@ void ase_awk_dprintval (ase_awk_run_t* run, ase_awk_val_t* val)
|
||||
|
||||
case ASE_AWK_VAL_MAP:
|
||||
DPRINTF (DCUSTOM, ASE_T("MAP["));
|
||||
ase_awk_map_walk (((ase_awk_val_map_t*)val)->map, print_pair, run);
|
||||
ase_map_walk (((ase_awk_val_map_t*)val)->map, print_pair, run);
|
||||
DPRINTF (DCUSTOM, ASE_T("]"));
|
||||
break;
|
||||
|
||||
|
@ -12,8 +12,6 @@
|
||||
#endif
|
||||
|
||||
#include <ase/cmn/str.h>
|
||||
#include <ase/awk/map.h>
|
||||
|
||||
|
||||
enum ase_awk_val_type_t
|
||||
{
|
||||
@ -138,7 +136,7 @@ struct ase_awk_val_map_t
|
||||
* integers switch to map dynamically once the
|
||||
* non-integral index is seen.
|
||||
*/
|
||||
ase_awk_map_t* map;
|
||||
ase_map_t* map;
|
||||
};
|
||||
|
||||
/* ASE_AWK_VAL_REF */
|
||||
|
@ -4,38 +4,38 @@
|
||||
* {License}
|
||||
*/
|
||||
|
||||
#include <ase/awk/awk_i.h>
|
||||
#include <ase/cmn/map.h>
|
||||
#include <ase/cmn/str.h>
|
||||
|
||||
static ase_size_t hashkey (const ase_char_t* keyptr, ase_size_t keylen);
|
||||
static int rehash (ase_awk_map_t* map);
|
||||
static int rehash (ase_map_t* map);
|
||||
|
||||
#define FREE_PAIR(map,pair) \
|
||||
do { \
|
||||
ASE_AWK_FREE ((map)->awk, (ase_char_t*)ASE_AWK_PAIR_KEYPTR(pair)); \
|
||||
ASE_FREE ((map)->mmgr, (ase_char_t*)ASE_PAIR_KEYPTR(pair)); \
|
||||
if ((map)->freeval != ASE_NULL) \
|
||||
(map)->freeval ((map)->owner, ASE_AWK_PAIR_VAL(pair)); \
|
||||
ASE_AWK_FREE ((map)->awk, pair); \
|
||||
(map)->freeval ((map)->owner, ASE_PAIR_VAL(pair)); \
|
||||
ASE_FREE ((map)->mmgr, pair); \
|
||||
} while (0)
|
||||
|
||||
ase_awk_map_t* ase_awk_map_open (
|
||||
ase_map_t* ase_map_open (
|
||||
void* owner, ase_size_t capa, unsigned int factor,
|
||||
void(*freeval)(void*,void*), void(*sameval)(void*,void*),
|
||||
ase_awk_t* awk)
|
||||
ase_mmgr_t* mmgr)
|
||||
{
|
||||
ase_awk_map_t* map;
|
||||
ase_map_t* map;
|
||||
|
||||
ASE_ASSERTX (capa > 0, "the initial capacity should be greater than 0");
|
||||
|
||||
map = (ase_awk_map_t*) ASE_AWK_MALLOC (
|
||||
awk, ASE_SIZEOF(ase_awk_map_t));
|
||||
map = (ase_map_t*) ASE_MALLOC (mmgr, ASE_SIZEOF(ase_map_t));
|
||||
if (map == ASE_NULL) return ASE_NULL;
|
||||
|
||||
map->awk = awk;
|
||||
map->buck = (ase_awk_pair_t**)
|
||||
ASE_AWK_MALLOC (awk, ASE_SIZEOF(ase_awk_pair_t*) * capa);
|
||||
map->mmgr = mmgr;
|
||||
map->buck = (ase_pair_t**)
|
||||
ASE_MALLOC (mmgr, ASE_SIZEOF(ase_pair_t*)*capa);
|
||||
if (map->buck == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (awk, map);
|
||||
ASE_FREE (mmgr, map);
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
@ -52,17 +52,17 @@ ase_awk_map_t* ase_awk_map_open (
|
||||
return map;
|
||||
}
|
||||
|
||||
void ase_awk_map_close (ase_awk_map_t* map)
|
||||
void ase_map_close (ase_map_t* map)
|
||||
{
|
||||
ase_awk_map_clear (map);
|
||||
ASE_AWK_FREE (map->awk, map->buck);
|
||||
ASE_AWK_FREE (map->awk, map);
|
||||
ase_map_clear (map);
|
||||
ASE_FREE (map->mmgr, map->buck);
|
||||
ASE_FREE (map->mmgr, map);
|
||||
}
|
||||
|
||||
void ase_awk_map_clear (ase_awk_map_t* map)
|
||||
void ase_map_clear (ase_map_t* map)
|
||||
{
|
||||
ase_size_t i;
|
||||
ase_awk_pair_t* pair, * next;
|
||||
ase_pair_t* pair, * next;
|
||||
|
||||
for (i = 0; i < map->capa; i++)
|
||||
{
|
||||
@ -70,7 +70,7 @@ void ase_awk_map_clear (ase_awk_map_t* map)
|
||||
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
next = ASE_AWK_PAIR_LNK(pair);
|
||||
next = ASE_PAIR_LNK(pair);
|
||||
FREE_PAIR (map, pair);
|
||||
map->size--;
|
||||
pair = next;
|
||||
@ -80,15 +80,15 @@ void ase_awk_map_clear (ase_awk_map_t* map)
|
||||
}
|
||||
}
|
||||
|
||||
ase_size_t ase_awk_map_getsize (ase_awk_map_t* map)
|
||||
ase_size_t ase_map_getsize (ase_map_t* map)
|
||||
{
|
||||
return map->size;
|
||||
}
|
||||
|
||||
ase_awk_pair_t* ase_awk_map_get (
|
||||
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen)
|
||||
ase_pair_t* ase_map_get (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
ase_size_t hc;
|
||||
|
||||
hc = hashkey(keyptr,keylen) % map->capa;
|
||||
@ -97,32 +97,32 @@ ase_awk_pair_t* ase_awk_map_get (
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
if (ase_strxncmp (
|
||||
ASE_AWK_PAIR_KEYPTR(pair), ASE_AWK_PAIR_KEYLEN(pair),
|
||||
ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair),
|
||||
keyptr, keylen) == 0) return pair;
|
||||
|
||||
pair = ASE_AWK_PAIR_LNK(pair);
|
||||
pair = ASE_PAIR_LNK(pair);
|
||||
}
|
||||
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
ase_awk_pair_t* ase_awk_map_put (
|
||||
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
ase_pair_t* ase_map_put (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val)
|
||||
{
|
||||
int n;
|
||||
ase_awk_pair_t* px;
|
||||
ase_pair_t* px;
|
||||
|
||||
n = ase_awk_map_putx (map, keyptr, keylen, val, &px);
|
||||
n = ase_map_putx (map, keyptr, keylen, val, &px);
|
||||
if (n < 0) return ASE_NULL;
|
||||
return px;
|
||||
}
|
||||
|
||||
int ase_awk_map_putx (
|
||||
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val, ase_awk_pair_t** px)
|
||||
int ase_map_putx (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val, ase_pair_t** px)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
ase_size_t hc;
|
||||
|
||||
hc = hashkey(keyptr,keylen) % map->capa;
|
||||
@ -131,17 +131,17 @@ int ase_awk_map_putx (
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
if (ase_strxncmp (
|
||||
ASE_AWK_PAIR_KEYPTR(pair), ASE_AWK_PAIR_KEYLEN(pair),
|
||||
ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair),
|
||||
keyptr, keylen) == 0)
|
||||
{
|
||||
if (px != ASE_NULL)
|
||||
*px = ase_awk_map_setpair (map, pair, val);
|
||||
*px = ase_map_setpair (map, pair, val);
|
||||
else
|
||||
ase_awk_map_setpair (map, pair, val);
|
||||
ase_map_setpair (map, pair, val);
|
||||
|
||||
return 0; /* value changed for the existing key */
|
||||
}
|
||||
pair = ASE_AWK_PAIR_LNK(pair);
|
||||
pair = ASE_PAIR_LNK(pair);
|
||||
}
|
||||
|
||||
if (map->threshold > 0 &&
|
||||
@ -153,21 +153,20 @@ int ase_awk_map_putx (
|
||||
}
|
||||
}
|
||||
|
||||
pair = (ase_awk_pair_t*) ASE_AWK_MALLOC (
|
||||
map->awk, ASE_SIZEOF(ase_awk_pair_t));
|
||||
pair = (ase_pair_t*) ASE_MALLOC (map->mmgr, ASE_SIZEOF(ase_pair_t));
|
||||
if (pair == ASE_NULL) return -1; /* error */
|
||||
|
||||
/* duplicate the key if it is new */
|
||||
ASE_AWK_PAIR_KEYPTR(pair) = ase_awk_strxdup (map->awk, keyptr, keylen);
|
||||
if (ASE_AWK_PAIR_KEYPTR(pair) == ASE_NULL)
|
||||
ASE_PAIR_KEYPTR(pair) = ase_strxdup (keyptr, keylen, map->mmgr);
|
||||
if (ASE_PAIR_KEYPTR(pair) == ASE_NULL)
|
||||
{
|
||||
ASE_AWK_FREE (map->awk, pair);
|
||||
ASE_FREE (map->mmgr, pair);
|
||||
return -1; /* error */
|
||||
}
|
||||
|
||||
ASE_AWK_PAIR_KEYLEN(pair) = keylen;
|
||||
ASE_AWK_PAIR_VAL(pair) = val;
|
||||
ASE_AWK_PAIR_LNK(pair) = map->buck[hc];
|
||||
ASE_PAIR_KEYLEN(pair) = keylen;
|
||||
ASE_PAIR_VAL(pair) = val;
|
||||
ASE_PAIR_LNK(pair) = map->buck[hc];
|
||||
map->buck[hc] = pair;
|
||||
map->size++;
|
||||
|
||||
@ -175,11 +174,11 @@ int ase_awk_map_putx (
|
||||
return 1; /* new key added */
|
||||
}
|
||||
|
||||
ase_awk_pair_t* ase_awk_map_set (
|
||||
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
ase_pair_t* ase_map_set (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
ase_size_t hc;
|
||||
|
||||
hc = hashkey(keyptr,keylen) % map->capa;
|
||||
@ -188,35 +187,35 @@ ase_awk_pair_t* ase_awk_map_set (
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
if (ase_strxncmp (
|
||||
ASE_AWK_PAIR_KEYPTR(pair), ASE_AWK_PAIR_KEYLEN(pair),
|
||||
ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair),
|
||||
keyptr, keylen) == 0)
|
||||
{
|
||||
return ase_awk_map_setpair (map, pair, val);
|
||||
return ase_map_setpair (map, pair, val);
|
||||
}
|
||||
pair = ASE_AWK_PAIR_LNK(pair);
|
||||
pair = ASE_PAIR_LNK(pair);
|
||||
}
|
||||
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
ase_awk_pair_t* ase_awk_map_getpair (
|
||||
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
ase_pair_t* ase_map_getpair (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void** val)
|
||||
{
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
pair = ase_awk_map_get (map, keyptr, keylen);
|
||||
pair = ase_map_get (map, keyptr, keylen);
|
||||
if (pair == ASE_NULL) return ASE_NULL;
|
||||
*val = ASE_AWK_PAIR_VAL(pair);
|
||||
*val = ASE_PAIR_VAL(pair);
|
||||
|
||||
return pair;
|
||||
}
|
||||
|
||||
ase_awk_pair_t* ase_awk_map_setpair (
|
||||
ase_awk_map_t* map, ase_awk_pair_t* pair, void* val)
|
||||
ase_pair_t* ase_map_setpair (
|
||||
ase_map_t* map, ase_pair_t* pair, void* val)
|
||||
{
|
||||
/* use this function with care */
|
||||
if (ASE_AWK_PAIR_VAL(pair) == val)
|
||||
if (ASE_PAIR_VAL(pair) == val)
|
||||
{
|
||||
/* if the old value and the new value are the same,
|
||||
* it just calls the handler for this condition.
|
||||
@ -231,21 +230,21 @@ ase_awk_pair_t* ase_awk_map_setpair (
|
||||
/* frees the old value */
|
||||
if (map->freeval != ASE_NULL)
|
||||
{
|
||||
map->freeval (map->owner, ASE_AWK_PAIR_VAL(pair));
|
||||
map->freeval (map->owner, ASE_PAIR_VAL(pair));
|
||||
}
|
||||
|
||||
/* the new value takes the place */
|
||||
ASE_AWK_PAIR_VAL(pair) = val;
|
||||
ASE_PAIR_VAL(pair) = val;
|
||||
}
|
||||
|
||||
|
||||
return pair;
|
||||
}
|
||||
|
||||
int ase_awk_map_remove (
|
||||
ase_awk_map_t* map, const ase_char_t* keyptr, ase_size_t keylen)
|
||||
int ase_map_remove (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen)
|
||||
{
|
||||
ase_awk_pair_t* pair, * prev;
|
||||
ase_pair_t* pair, * prev;
|
||||
ase_size_t hc;
|
||||
|
||||
hc = hashkey(keyptr,keylen) % map->capa;
|
||||
@ -255,12 +254,12 @@ int ase_awk_map_remove (
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
if (ase_strxncmp (
|
||||
ASE_AWK_PAIR_KEYPTR(pair), ASE_AWK_PAIR_KEYLEN(pair),
|
||||
ASE_PAIR_KEYPTR(pair), ASE_PAIR_KEYLEN(pair),
|
||||
keyptr, keylen) == 0)
|
||||
{
|
||||
if (prev == ASE_NULL)
|
||||
map->buck[hc] = ASE_AWK_PAIR_LNK(pair);
|
||||
else prev->next = ASE_AWK_PAIR_LNK(pair);
|
||||
map->buck[hc] = ASE_PAIR_LNK(pair);
|
||||
else prev->next = ASE_PAIR_LNK(pair);
|
||||
|
||||
FREE_PAIR (map, pair);
|
||||
map->size--;
|
||||
@ -269,17 +268,17 @@ int ase_awk_map_remove (
|
||||
}
|
||||
|
||||
prev = pair;
|
||||
pair = ASE_AWK_PAIR_LNK(pair);
|
||||
pair = ASE_PAIR_LNK(pair);
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
int ase_awk_map_walk (ase_awk_map_t* map,
|
||||
int (*walker) (ase_awk_pair_t*,void*), void* arg)
|
||||
int ase_map_walk (ase_map_t* map,
|
||||
int (*walker) (ase_pair_t*,void*), void* arg)
|
||||
{
|
||||
ase_size_t i;
|
||||
ase_awk_pair_t* pair, * next;
|
||||
ase_pair_t* pair, * next;
|
||||
|
||||
for (i = 0; i < map->capa; i++)
|
||||
{
|
||||
@ -287,7 +286,7 @@ int ase_awk_map_walk (ase_awk_map_t* map,
|
||||
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
next = ASE_AWK_PAIR_LNK(pair);
|
||||
next = ASE_PAIR_LNK(pair);
|
||||
if (walker(pair,arg) == -1) return -1;
|
||||
pair = next;
|
||||
}
|
||||
@ -296,11 +295,11 @@ int ase_awk_map_walk (ase_awk_map_t* map,
|
||||
return 0;
|
||||
}
|
||||
|
||||
ase_awk_pair_t* ase_awk_map_getfirstpair (
|
||||
ase_awk_map_t* map, ase_size_t* buckno)
|
||||
ase_pair_t* ase_map_getfirstpair (
|
||||
ase_map_t* map, ase_size_t* buckno)
|
||||
{
|
||||
ase_size_t i;
|
||||
ase_awk_pair_t* pair;
|
||||
ase_pair_t* pair;
|
||||
|
||||
for (i = 0; i < map->capa; i++)
|
||||
{
|
||||
@ -315,13 +314,13 @@ ase_awk_pair_t* ase_awk_map_getfirstpair (
|
||||
return ASE_NULL;
|
||||
}
|
||||
|
||||
ase_awk_pair_t* ase_awk_map_getnextpair (
|
||||
ase_awk_map_t* map, ase_awk_pair_t* pair, ase_size_t* buckno)
|
||||
ase_pair_t* ase_map_getnextpair (
|
||||
ase_map_t* map, ase_pair_t* pair, ase_size_t* buckno)
|
||||
{
|
||||
ase_size_t i;
|
||||
ase_awk_pair_t* next;
|
||||
ase_pair_t* next;
|
||||
|
||||
next = ASE_AWK_PAIR_LNK(pair);
|
||||
next = ASE_PAIR_LNK(pair);
|
||||
if (next != ASE_NULL)
|
||||
{
|
||||
/* no change in bucket number */
|
||||
@ -357,15 +356,15 @@ static ase_size_t hashkey (const ase_char_t* keyptr, ase_size_t keylen)
|
||||
return n;
|
||||
}
|
||||
|
||||
static int rehash (ase_awk_map_t* map)
|
||||
static int rehash (ase_map_t* map)
|
||||
{
|
||||
ase_size_t i, hc, new_capa;
|
||||
ase_awk_pair_t** new_buck;
|
||||
ase_pair_t** new_buck;
|
||||
|
||||
new_capa = (map->capa >= 65536)? (map->capa + 65536): (map->capa << 1);
|
||||
|
||||
new_buck = (ase_awk_pair_t**) ASE_AWK_MALLOC (
|
||||
map->awk, ASE_SIZEOF(ase_awk_pair_t*) * new_capa);
|
||||
new_buck = (ase_pair_t**) ASE_MALLOC (
|
||||
map->mmgr, ASE_SIZEOF(ase_pair_t*) * new_capa);
|
||||
if (new_buck == ASE_NULL)
|
||||
{
|
||||
/* once rehash fails, the rehashing is disabled */
|
||||
@ -377,24 +376,24 @@ static int rehash (ase_awk_map_t* map)
|
||||
|
||||
for (i = 0; i < map->capa; i++)
|
||||
{
|
||||
ase_awk_pair_t* pair = map->buck[i];
|
||||
ase_pair_t* pair = map->buck[i];
|
||||
|
||||
while (pair != ASE_NULL)
|
||||
{
|
||||
ase_awk_pair_t* next = ASE_AWK_PAIR_LNK(pair);
|
||||
ase_pair_t* next = ASE_PAIR_LNK(pair);
|
||||
|
||||
hc = hashkey(
|
||||
ASE_AWK_PAIR_KEYPTR(pair),
|
||||
ASE_AWK_PAIR_KEYLEN(pair)) % new_capa;
|
||||
ASE_PAIR_KEYPTR(pair),
|
||||
ASE_PAIR_KEYLEN(pair)) % new_capa;
|
||||
|
||||
ASE_AWK_PAIR_LNK(pair) = new_buck[hc];
|
||||
ASE_PAIR_LNK(pair) = new_buck[hc];
|
||||
new_buck[hc] = pair;
|
||||
|
||||
pair = next;
|
||||
}
|
||||
}
|
||||
|
||||
ASE_AWK_FREE (map->awk, map->buck);
|
||||
ASE_FREE (map->mmgr, map->buck);
|
||||
map->buck = new_buck;
|
||||
map->capa = new_capa;
|
||||
map->threshold = ((ase_size_t)map->factor) * map->capa / 100;
|
133
ase/cmn/map.h
Normal file
133
ase/cmn/map.h
Normal file
@ -0,0 +1,133 @@
|
||||
/*
|
||||
* $Id: map.h,v 1.8 2007/09/30 15:12:20 bacon Exp $
|
||||
*
|
||||
* {License}
|
||||
*/
|
||||
|
||||
#ifndef _ASE_CMN_MAP_H_
|
||||
#define _ASE_CMN_MAP_H_
|
||||
|
||||
#include <ase/cmn/types.h>
|
||||
#include <ase/cmn/macros.h>
|
||||
|
||||
typedef struct ase_map_t ase_map_t;
|
||||
typedef struct ase_pair_t ase_pair_t;
|
||||
|
||||
struct ase_pair_t
|
||||
{
|
||||
struct
|
||||
{
|
||||
ase_char_t* ptr;
|
||||
ase_size_t len;
|
||||
} key;
|
||||
|
||||
void* val;
|
||||
|
||||
/* used internally */
|
||||
ase_pair_t* next;
|
||||
};
|
||||
|
||||
struct ase_map_t
|
||||
{
|
||||
/* map owner. passed to freeval and sameval as the first argument */
|
||||
void* owner;
|
||||
|
||||
ase_size_t size;
|
||||
ase_size_t capa;
|
||||
|
||||
unsigned int factor;
|
||||
ase_size_t threshold;
|
||||
|
||||
ase_pair_t** buck;
|
||||
|
||||
void (*freeval) (void* owner,void* val);
|
||||
void (*sameval) (void* owner,void* val);
|
||||
|
||||
/* the mmgr pointed at by mmgr should be valid
|
||||
* while the map is alive as the contents are
|
||||
* not replicated */
|
||||
ase_mmgr_t* mmgr;
|
||||
};
|
||||
|
||||
#define ASE_PAIR_KEYPTR(p) ((p)->key.ptr)
|
||||
#define ASE_PAIR_KEYLEN(p) ((p)->key.len)
|
||||
#define ASE_PAIR_VAL(p) ((p)->val)
|
||||
#define ASE_PAIR_LNK(p) ((p)->next)
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Creates a hashed map with a dynamic array bucket and a list of values linked
|
||||
*
|
||||
* @param owner [in]
|
||||
* @param capa [in]
|
||||
* @param factor [in]
|
||||
* @param freeval [in]
|
||||
* @param sameval [in]
|
||||
* @param mmgr [in]
|
||||
*/
|
||||
ase_map_t* ase_map_open (
|
||||
void* owner, ase_size_t capa, unsigned int factor,
|
||||
void(*freeval)(void*,void*), void(*sameval)(void*,void*),
|
||||
ase_mmgr_t* mmgr);
|
||||
|
||||
/**
|
||||
* Destroys a hashed map
|
||||
*/
|
||||
void ase_map_close (ase_map_t* map);
|
||||
|
||||
void ase_map_clear (ase_map_t* map);
|
||||
|
||||
ase_size_t ase_map_getsize (ase_map_t* map);
|
||||
|
||||
ase_pair_t* ase_map_get (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen);
|
||||
|
||||
ase_pair_t* ase_map_put (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val);
|
||||
|
||||
int ase_map_putx (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val, ase_pair_t** px);
|
||||
|
||||
ase_pair_t* ase_map_set (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void* val);
|
||||
|
||||
ase_pair_t* ase_map_getpair (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen,
|
||||
void** val);
|
||||
|
||||
ase_pair_t* ase_map_setpair (
|
||||
ase_map_t* map, ase_pair_t* pair, void* val);
|
||||
|
||||
int ase_map_remove (
|
||||
ase_map_t* map, const ase_char_t* keyptr, ase_size_t keylen);
|
||||
|
||||
int ase_map_walk (ase_map_t* map,
|
||||
int (*walker)(ase_pair_t*,void*), void* arg);
|
||||
|
||||
/**
|
||||
* Gets the pointer to the first pair in the map.
|
||||
* @param map [in]
|
||||
* @param buckno [out]
|
||||
*/
|
||||
ase_pair_t* ase_map_getfirstpair (
|
||||
ase_map_t* map, ase_size_t* buckno);
|
||||
/**
|
||||
* Gets the pointer to the next pair in the map.
|
||||
* @param map [in]
|
||||
* @param pair [in]
|
||||
* @param buckno [in out]
|
||||
*/
|
||||
ase_pair_t* ase_map_getnextpair (
|
||||
ase_map_t* map, ase_pair_t* pair, ase_size_t* buckno);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
@ -23,6 +23,7 @@ TMP_DIR = $(MODE)
|
||||
OBJ_FILES_LIB = \
|
||||
$(TMP_DIR)\mem.obj \
|
||||
$(TMP_DIR)\str.obj \
|
||||
$(TMP_DIR)\map.obj \
|
||||
$(TMP_DIR)\misc.obj
|
||||
|
||||
all: lib
|
||||
@ -40,6 +41,9 @@ $(TMP_DIR)\mem.obj: mem.c
|
||||
$(TMP_DIR)\str.obj: str.c
|
||||
$(CC) $(CFLAGS) /Fo$@ /c str.c
|
||||
|
||||
$(TMP_DIR)\map.obj: map.c
|
||||
$(CC) $(CFLAGS) /Fo$@ /c map.c
|
||||
|
||||
$(TMP_DIR)\misc.obj: misc.c
|
||||
$(CC) $(CFLAGS) /Fo$@ /c misc.c
|
||||
|
||||
|
@ -4,7 +4,6 @@
|
||||
|
||||
#include <ase/awk/awk.h>
|
||||
#include <ase/awk/val.h>
|
||||
#include <ase/awk/map.h>
|
||||
|
||||
#include <ase/utl/ctype.h>
|
||||
#include <ase/utl/stdio.h>
|
||||
@ -850,7 +849,7 @@ static void on_run_start (ase_awk_run_t* run, void* custom)
|
||||
dprintf (ASE_T("[AWK ABOUT TO START]\n"));
|
||||
}
|
||||
|
||||
static int print_awk_value (ase_awk_pair_t* pair, void* arg)
|
||||
static int print_awk_value (ase_pair_t* pair, void* arg)
|
||||
{
|
||||
ase_awk_run_t* run = (ase_awk_run_t*)arg;
|
||||
dprintf (ASE_T("%.*s = "), pair->key.len, pair->key.ptr);
|
||||
@ -873,7 +872,7 @@ static void on_run_return (
|
||||
dprintf (ASE_T("\n"));
|
||||
|
||||
dprintf (ASE_T("[NAMED VARIABLES]\n"));
|
||||
ase_awk_map_walk (ase_awk_getrunnamedvarmap(run), print_awk_value, run);
|
||||
ase_map_walk (ase_awk_getrunnamedvarmap(run), print_awk_value, run);
|
||||
dprintf (ASE_T("[END NAMED VARIABLES]\n"));
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user