This commit is contained in:
hyung-hwan 2008-02-13 01:39:56 +00:00
parent c17dc12bbd
commit 8f01118529
24 changed files with 457 additions and 491 deletions

View File

@ -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;

View File

@ -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 */

View File

@ -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=""/>

View File

@ -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

View 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"
>

View File

@ -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;

View File

@ -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);

View File

@ -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;

View File

@ -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)
{

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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;

View File

@ -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 */

View File

@ -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
View 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

View File

@ -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

View File

@ -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"));
}