* renamed map to htb

* added qse_awk_findgbl()
* added Awk::findGlobal()
* began working on red-black tree
This commit is contained in:
2010-07-09 00:58:44 +00:00
parent 57c56594a5
commit 99c72b1755
34 changed files with 2709 additions and 1777 deletions

View File

@ -1,5 +1,5 @@
/*
* $Id: Awk.cpp 318 2009-12-18 12:34:42Z hyunghwan.chung $
* $Id: Awk.cpp 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -605,7 +605,7 @@ int Awk::Value::setIndexedVal (Run* r, const Index& idx, val_t* v)
qse_awk_rtx_refupval (r->rtx, v);
/* update the map with a given value */
pair_t* pair = qse_map_upsert (
pair_t* pair = qse_htb_upsert (
((qse_awk_val_map_t*)map)->map,
(char_t*)idx.ptr, idx.len, v, 0);
if (pair == QSE_NULL)
@ -640,7 +640,7 @@ int Awk::Value::setIndexedVal (Run* r, const Index& idx, val_t* v)
qse_awk_rtx_refupval (r->rtx, v);
pair_t* pair = qse_map_upsert (
pair_t* pair = qse_htb_upsert (
((qse_awk_val_map_t*)val)->map,
(char_t*)idx.ptr, idx.len, v, 0);
if (pair == QSE_NULL)
@ -768,7 +768,7 @@ int Awk::Value::getIndexed (const Index& idx, Value* v) const
// get the value from the map.
qse_awk_val_map_t* m = (qse_awk_val_map_t*)val;
pair_t* pair = qse_map_search (m->map, idx.ptr, idx.len);
pair_t* pair = qse_htb_search (m->map, idx.ptr, idx.len);
// the key is not found. it is not an error. v is just nil
if (pair == QSE_NULL)
@ -778,7 +778,7 @@ int Awk::Value::getIndexed (const Index& idx, Value* v) const
}
// if v.set fails, it should return an error
return v->setVal (run, (val_t*)QSE_MAP_VPTR(pair));
return v->setVal (run, (val_t*)QSE_HTB_VPTR(pair));
}
Awk::Value::IndexIterator Awk::Value::getFirstIndex (Index* idx) const
@ -789,11 +789,11 @@ Awk::Value::IndexIterator Awk::Value::getFirstIndex (Index* idx) const
size_t buckno;
qse_awk_val_map_t* m = (qse_awk_val_map_t*)val;
pair_t* pair = qse_map_getfirstpair (m->map, &buckno);
pair_t* pair = qse_htb_getfirstpair (m->map, &buckno);
if (pair == QSE_NULL) return IndexIterator::END; // no more key
idx->ptr = (const char_t*)QSE_MAP_KPTR(pair);
idx->len = QSE_MAP_KLEN(pair);
idx->ptr = (const char_t*)QSE_HTB_KPTR(pair);
idx->len = QSE_HTB_KLEN(pair);
return IndexIterator (pair, buckno);
}
@ -810,11 +810,11 @@ Awk::Value::IndexIterator Awk::Value::getNextIndex (
pair_t* pair = (pair_t*)iter.pair;
size_t buckno = iter.buckno;
pair = qse_map_getnextpair (m->map, pair, &buckno);
pair = qse_htb_getnextpair (m->map, pair, &buckno);
if (pair == QSE_NULL) return IndexIterator::END;
idx->ptr = (const char_t*)QSE_MAP_KPTR(pair);
idx->len = QSE_MAP_KLEN(pair);
idx->ptr = (const char_t*)QSE_HTB_KPTR(pair);
idx->len = QSE_HTB_KLEN(pair);
return IndexIterator (pair, buckno);
}
@ -829,12 +829,12 @@ int Awk::Argument::getFirstIndex (Awk::Argument& val) const
qse_size_t buckno;
qse_awk_val_map_t* m = (qse_awk_val_map_t*)this->val;
pair_t* pair = qse_map_getfirstpair (m->map, &buckno);
pair_t* pair = qse_htb_getfirstpair (m->map, &buckno);
if (pair == QSE_NULL) return 0; // no more key
if (val.init (
(qse_char_t*)QSE_MAP_KPTR(pair),
QSE_MAP_KLEN(pair)) == -1) return -1;
(qse_char_t*)QSE_HTB_KPTR(pair),
QSE_HTB_KLEN(pair)) == -1) return -1;
// reuse the string field as an interator.
this->str.ptr = (char_t*)pair;
@ -855,12 +855,12 @@ int Awk::Argument::getNextIndex (Awk::Argument& val) const
pair_t* pair = (pair_t*)this->str.ptr;
qse_size_t buckno = this->str.len;
pair = qse_map_getnextpair (m->map, pair, &buckno);
pair = qse_htb_getnextpair (m->map, pair, &buckno);
if (pair == QSE_NULL) return 0;
if (val.init (
(qse_char_t*)QSE_MAP_KPTR(pair),
QSE_MAP_KLEN(pair)) == -1) return -1;
(qse_char_t*)QSE_HTB_KPTR(pair),
QSE_HTB_KLEN(pair)) == -1) return -1;
// reuse the string field as an interator.
this->str.ptr = (char_t*)pair;
@ -1099,7 +1099,7 @@ void Awk::retrieveError (Run* run)
}
static void free_function_map_value (
Awk::map_t* map, void* dptr, Awk::size_t dlen)
Awk::htb_t* map, void* dptr, Awk::size_t dlen)
{
Awk* awk = *(Awk**) QSE_XTN (map);
qse_awk_free ((Awk::awk_t*)*awk, dptr);
@ -1127,7 +1127,7 @@ int Awk::open ()
dflerrstr = qse_awk_geterrstr (awk);
qse_awk_seterrstr (awk, xerrstr);
functionMap = qse_map_open (
functionMap = qse_htb_open (
qse_awk_getmmgr(awk), QSE_SIZEOF(this), 512, 70);
if (functionMap == QSE_NULL)
{
@ -1139,9 +1139,9 @@ int Awk::open ()
}
*(Awk**)QSE_XTN(functionMap) = this;
qse_map_setcopier (functionMap, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setfreeer (functionMap, QSE_MAP_VAL, free_function_map_value);
qse_map_setscale (functionMap, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (functionMap, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setfreeer (functionMap, QSE_HTB_VAL, free_function_map_value);
qse_htb_setscale (functionMap, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
return 0;
}
@ -1153,7 +1153,7 @@ void Awk::close ()
if (functionMap != QSE_NULL)
{
qse_map_close (functionMap);
qse_htb_close (functionMap);
functionMap = QSE_NULL;
}
@ -1327,7 +1327,7 @@ int Awk::dispatch_function (Run* run, const cstr_t* name)
{
pair_t* pair;
pair = qse_map_search (functionMap, name->ptr, name->len);
pair = qse_htb_search (functionMap, name->ptr, name->len);
if (pair == QSE_NULL)
{
run->setError (QSE_AWK_EFUNNF, name);
@ -1335,7 +1335,7 @@ int Awk::dispatch_function (Run* run, const cstr_t* name)
}
FunctionHandler handler;
handler = *(FunctionHandler*)QSE_MAP_VPTR(pair);
handler = *(FunctionHandler*)QSE_HTB_VPTR(pair);
size_t i, nargs = qse_awk_rtx_getnargs(run->rtx);
@ -1491,6 +1491,14 @@ int Awk::deleteGlobal (const char_t* name)
return n;
}
int Awk::findGlobal (const char_t* name)
{
QSE_ASSERT (awk != QSE_NULL);
int n = qse_awk_findgbl (awk, name, qse_strlen(name));
if (n <= -1) retrieveError ();
return n;
}
int Awk::setGlobal (int id, const Value& v)
{
QSE_ASSERT (awk != QSE_NULL);
@ -1552,7 +1560,7 @@ int Awk::addFunction (
return -1;
}
pair_t* pair = qse_map_upsert (
pair_t* pair = qse_htb_upsert (
functionMap, (char_t*)name, nameLen, tmp, 0);
if (pair == QSE_NULL)
{
@ -1573,7 +1581,7 @@ int Awk::deleteFunction (const char_t* name)
size_t nameLen = qse_strlen(name);
int n = qse_awk_delfnc (awk, name, nameLen);
if (n == 0) qse_map_delete (functionMap, name, nameLen);
if (n == 0) qse_htb_delete (functionMap, name, nameLen);
else retrieveError ();
return n;

View File

@ -1,5 +1,5 @@
/*
* $Id: StdAwk.cpp 318 2009-12-18 12:34:42Z hyunghwan.chung $
* $Id: StdAwk.cpp 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -450,8 +450,8 @@ int StdAwk::open_console_in (Console& io)
qse_sio_t* sio;
const qse_char_t* file;
qse_awk_val_t* argv;
qse_map_t* map;
qse_map_pair_t* pair;
qse_htb_t* map;
qse_htb_pair_t* pair;
qse_char_t ibuf[128];
qse_size_t ibuflen;
qse_awk_val_t* v;
@ -512,10 +512,10 @@ int StdAwk::open_console_in (Console& io)
ibuf, QSE_COUNTOF(ibuf)
);
pair = qse_map_search (map, ibuf, ibuflen);
pair = qse_htb_search (map, ibuf, ibuflen);
QSE_ASSERT (pair != QSE_NULL);
v = (qse_awk_val_t*)QSE_MAP_VPTR(pair);
v = (qse_awk_val_t*)QSE_HTB_VPTR(pair);
QSE_ASSERT (v != QSE_NULL);
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;

View File

@ -1,5 +1,5 @@
/*
* $Id: awk.c 287 2009-09-15 10:01:02Z hyunghwan.chung $
* $Id: awk.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -22,7 +22,7 @@
QSE_IMPLEMENT_COMMON_FUNCTIONS (awk)
static void free_fun (qse_map_t* map, void* vptr, qse_size_t vlen)
static void free_fun (qse_htb_t* map, void* vptr, qse_size_t vlen)
{
qse_awk_t* awk = *(qse_awk_t**)QSE_XTN(map);
qse_awk_fun_t* f = (qse_awk_fun_t*)vptr;
@ -34,7 +34,7 @@ static void free_fun (qse_map_t* map, void* vptr, qse_size_t vlen)
QSE_AWK_FREE (awk, f);
}
static void free_fnc (qse_map_t* map, void* vptr, qse_size_t vlen)
static void free_fnc (qse_htb_t* map, void* vptr, qse_size_t vlen)
{
qse_awk_t* awk = *(qse_awk_t**)QSE_XTN(map);
qse_awk_fnc_t* f = (qse_awk_fnc_t*)vptr;
@ -113,50 +113,50 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_awk_prm_t* prm)
if (init_token (mmgr, &awk->tok) == -1) goto oops;
if (init_token (mmgr, &awk->ntok) == -1) goto oops;
awk->wtab = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
awk->wtab = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
if (awk->wtab == QSE_NULL) goto oops;
*(qse_awk_t**)QSE_XTN(awk->wtab) = awk;
qse_map_setcopier (awk->wtab, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setcopier (awk->wtab, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
qse_map_setscale (awk->wtab, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_map_setscale (awk->wtab, QSE_MAP_VAL, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (awk->wtab, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setcopier (awk->wtab, QSE_HTB_VAL, QSE_HTB_COPIER_INLINE);
qse_htb_setscale (awk->wtab, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setscale (awk->wtab, QSE_HTB_VAL, QSE_SIZEOF(qse_char_t));
awk->rwtab = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
awk->rwtab = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
if (awk->rwtab == QSE_NULL) goto oops;
*(qse_awk_t**)QSE_XTN(awk->rwtab) = awk;
qse_map_setcopier (awk->rwtab, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setcopier (awk->rwtab, QSE_MAP_VAL, QSE_MAP_COPIER_INLINE);
qse_map_setscale (awk->rwtab, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_map_setscale (awk->rwtab, QSE_MAP_VAL, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (awk->rwtab, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setcopier (awk->rwtab, QSE_HTB_VAL, QSE_HTB_COPIER_INLINE);
qse_htb_setscale (awk->rwtab, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setscale (awk->rwtab, QSE_HTB_VAL, QSE_SIZEOF(qse_char_t));
awk->sio.names = qse_map_open (mmgr, QSE_SIZEOF(awk), 128, 70);
awk->sio.names = qse_htb_open (mmgr, QSE_SIZEOF(awk), 128, 70);
if (awk->sio.names == QSE_NULL) goto oops;
*(qse_awk_t**)QSE_XTN(awk->sio.names) = awk;
qse_map_setcopier (awk->sio.names, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setscale (awk->sio.names, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (awk->sio.names, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setscale (awk->sio.names, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
awk->sio.inp = &awk->sio.arg;
/* TODO: initial map size?? */
awk->tree.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
awk->tree.funs = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
if (awk->tree.funs == QSE_NULL) goto oops;
*(qse_awk_t**)QSE_XTN(awk->tree.funs) = awk;
qse_map_setcopier (awk->tree.funs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setfreeer (awk->tree.funs, QSE_MAP_VAL, free_fun);
qse_map_setscale (awk->tree.funs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (awk->tree.funs, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setfreeer (awk->tree.funs, QSE_HTB_VAL, free_fun);
qse_htb_setscale (awk->tree.funs, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
awk->parse.funs = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
awk->parse.funs = qse_htb_open (mmgr, QSE_SIZEOF(awk), 256, 70);
if (awk->parse.funs == QSE_NULL) goto oops;
*(qse_awk_t**)QSE_XTN(awk->parse.funs) = awk;
qse_map_setcopier (awk->parse.funs, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setscale (awk->parse.funs, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (awk->parse.funs, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setscale (awk->parse.funs, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
awk->parse.named = qse_map_open (mmgr, QSE_SIZEOF(awk), 256, 70);
awk->parse.named = qse_htb_open (mmgr, QSE_SIZEOF(awk), 256, 70);
if (awk->parse.named == QSE_NULL) goto oops;
*(qse_awk_t**)QSE_XTN(awk->parse.named) = awk;
qse_map_setcopier (
awk->parse.named, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setscale (
awk->parse.named, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (
awk->parse.named, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setscale (
awk->parse.named, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
awk->parse.gbls = qse_lda_open (mmgr, QSE_SIZEOF(awk), 128);
awk->parse.lcls = qse_lda_open (mmgr, QSE_SIZEOF(awk), 64);
@ -197,28 +197,28 @@ qse_awk_t* qse_awk_open (qse_mmgr_t* mmgr, qse_size_t xtn, qse_awk_prm_t* prm)
awk->tree.chain_size = 0;
awk->fnc.sys = QSE_NULL;
awk->fnc.user = qse_map_open (mmgr, QSE_SIZEOF(awk), 512, 70);
awk->fnc.user = qse_htb_open (mmgr, QSE_SIZEOF(awk), 512, 70);
if (awk->fnc.user == QSE_NULL) goto oops;
*(qse_awk_t**)QSE_XTN(awk->fnc.user) = awk;
qse_map_setcopier (awk->fnc.user, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setfreeer (awk->fnc.user, QSE_MAP_VAL, free_fnc);
qse_map_setscale (awk->fnc.user, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (awk->fnc.user, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setfreeer (awk->fnc.user, QSE_HTB_VAL, free_fnc);
qse_htb_setscale (awk->fnc.user, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
if (qse_awk_initgbls (awk) <= -1) goto oops;
return awk;
oops:
if (awk->fnc.user) qse_map_close (awk->fnc.user);
if (awk->fnc.user) qse_htb_close (awk->fnc.user);
if (awk->parse.params) qse_lda_close (awk->parse.params);
if (awk->parse.lcls) qse_lda_close (awk->parse.lcls);
if (awk->parse.gbls) qse_lda_close (awk->parse.gbls);
if (awk->parse.named) qse_map_close (awk->parse.named);
if (awk->parse.funs) qse_map_close (awk->parse.funs);
if (awk->tree.funs) qse_map_close (awk->tree.funs);
if (awk->sio.names) qse_map_close (awk->sio.names);
if (awk->rwtab) qse_map_close (awk->rwtab);
if (awk->wtab) qse_map_close (awk->wtab);
if (awk->parse.named) qse_htb_close (awk->parse.named);
if (awk->parse.funs) qse_htb_close (awk->parse.funs);
if (awk->tree.funs) qse_htb_close (awk->tree.funs);
if (awk->sio.names) qse_htb_close (awk->sio.names);
if (awk->rwtab) qse_htb_close (awk->rwtab);
if (awk->wtab) qse_htb_close (awk->wtab);
fini_token (&awk->ntok);
fini_token (&awk->tok);
fini_token (&awk->ptok);
@ -231,19 +231,19 @@ int qse_awk_close (qse_awk_t* awk)
{
if (qse_awk_clear (awk) <= -1) return -1;
/*qse_awk_clrfnc (awk);*/
qse_map_close (awk->fnc.user);
qse_htb_close (awk->fnc.user);
qse_lda_close (awk->parse.params);
qse_lda_close (awk->parse.lcls);
qse_lda_close (awk->parse.gbls);
qse_map_close (awk->parse.named);
qse_map_close (awk->parse.funs);
qse_htb_close (awk->parse.named);
qse_htb_close (awk->parse.funs);
qse_map_close (awk->tree.funs);
qse_map_close (awk->sio.names);
qse_htb_close (awk->tree.funs);
qse_htb_close (awk->sio.names);
qse_map_close (awk->rwtab);
qse_map_close (awk->wtab);
qse_htb_close (awk->rwtab);
qse_htb_close (awk->wtab);
fini_token (&awk->ntok);
fini_token (&awk->tok);
@ -271,8 +271,8 @@ int qse_awk_clear (qse_awk_t* awk)
qse_lda_clear (awk->parse.lcls);
qse_lda_clear (awk->parse.params);
qse_map_clear (awk->parse.named);
qse_map_clear (awk->parse.funs);
qse_htb_clear (awk->parse.named);
qse_htb_clear (awk->parse.funs);
awk->parse.nlcls_max = 0;
awk->parse.depth.cur.block = 0;
@ -287,7 +287,7 @@ int qse_awk_clear (qse_awk_t* awk)
awk->tree.cur_fun.ptr = QSE_NULL;
awk->tree.cur_fun.len = 0;
qse_map_clear (awk->tree.funs);
qse_htb_clear (awk->tree.funs);
if (awk->tree.begin != QSE_NULL)
{
@ -324,7 +324,7 @@ int qse_awk_clear (qse_awk_t* awk)
/* this table must not be cleared here as there can be a reference
* to an entry of this table from errinf.fil when qse_awk_parse()
* failed. this table is cleared in qse_awk_parse().
* qse_map_clear (awk->sio.names);
* qse_htb_clear (awk->sio.names);
*/
awk->sio.last.c = QSE_CHAR_EOF;
@ -363,9 +363,9 @@ void qse_awk_stopall (qse_awk_t* awk)
int qse_awk_getword (qse_awk_t* awk, const qse_cstr_t* okw, qse_cstr_t* nkw)
{
qse_map_pair_t* p;
qse_htb_pair_t* p;
p = qse_map_search (awk->wtab, okw->ptr, okw->len);
p = qse_htb_search (awk->wtab, okw->ptr, okw->len);
if (p == QSE_NULL) return -1;
nkw->ptr = ((qse_cstr_t*)p->vptr)->ptr;
@ -376,26 +376,26 @@ int qse_awk_getword (qse_awk_t* awk, const qse_cstr_t* okw, qse_cstr_t* nkw)
int qse_awk_unsetword (qse_awk_t* awk, const qse_cstr_t* kw)
{
qse_map_pair_t* p;
qse_htb_pair_t* p;
QSE_ASSERT (kw->ptr != QSE_NULL);
p = qse_map_search (awk->wtab, kw->ptr, kw->len);
p = qse_htb_search (awk->wtab, kw->ptr, kw->len);
if (p == QSE_NULL)
{
qse_awk_seterrnum (awk, QSE_AWK_ENOENT, kw);
return -1;
}
qse_map_delete (awk->rwtab, QSE_MAP_VPTR(p), QSE_MAP_VLEN(p));
qse_map_delete (awk->wtab, kw->ptr, kw->len);
qse_htb_delete (awk->rwtab, QSE_HTB_VPTR(p), QSE_HTB_VLEN(p));
qse_htb_delete (awk->wtab, kw->ptr, kw->len);
return 0;
}
void qse_awk_unsetallwords (qse_awk_t* awk)
{
qse_map_clear (awk->wtab);
qse_map_clear (awk->rwtab);
qse_htb_clear (awk->wtab);
qse_htb_clear (awk->rwtab);
}
int qse_awk_setword (
@ -422,7 +422,7 @@ int qse_awk_setword (
QSE_ASSERT (nkw->ptr != QSE_NULL);
/* set the word */
if (qse_map_upsert (
if (qse_htb_upsert (
awk->wtab,
(qse_char_t*)okw->ptr, okw->len,
(qse_char_t*)nkw->ptr, nkw->len) == QSE_NULL)
@ -431,12 +431,12 @@ int qse_awk_setword (
return -1;
}
if (qse_map_upsert (
if (qse_htb_upsert (
awk->rwtab,
(qse_char_t*)nkw->ptr, nkw->len,
(qse_char_t*)okw->ptr, okw->len) == QSE_NULL)
{
qse_map_delete (awk->wtab, okw->ptr, okw->len);
qse_htb_delete (awk->wtab, okw->ptr, okw->len);
qse_awk_seterrnum (awk, QSE_AWK_ENOMEM, QSE_NULL);
return -1;
}

View File

@ -1,5 +1,5 @@
/*
* $Id: awk.h 312 2009-12-10 13:03:54Z hyunghwan.chung $
* $Id: awk.h 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -25,7 +25,7 @@
#include "../cmn/mem.h"
#include <qse/cmn/chr.h>
#include <qse/cmn/str.h>
#include <qse/cmn/map.h>
#include <qse/cmn/htb.h>
#include <qse/cmn/lda.h>
#include <qse/cmn/rex.h>
@ -89,7 +89,7 @@ struct qse_awk_tree_t
qse_size_t ngbls; /* total number of globals */
qse_size_t ngbls_base; /* number of intrinsic globals */
qse_cstr_t cur_fun;
qse_map_t* funs; /* awk function map */
qse_htb_t* funs; /* awk function map */
qse_awk_nde_t* begin;
qse_awk_nde_t* begin_tail;
@ -123,9 +123,9 @@ struct qse_awk_t
int option;
/* word table */
qse_map_t* wtab;
qse_htb_t* wtab;
/* reverse word table */
qse_map_t* rwtab;
qse_htb_t* rwtab;
/* parse tree */
qse_awk_tree_t tree;
@ -159,10 +159,10 @@ struct qse_awk_t
} depth;
/* function calls */
qse_map_t* funs;
qse_htb_t* funs;
/* named variables */
qse_map_t* named;
qse_htb_t* named;
/* global variables */
qse_lda_t* gbls;
@ -190,7 +190,7 @@ struct qse_awk_t
qse_awk_sio_arg_t arg; /* for the top level source */
qse_awk_sio_arg_t* inp; /* current input */
qse_map_t* names;
qse_htb_t* names;
} sio;
/* previous token */
@ -204,7 +204,7 @@ struct qse_awk_t
struct
{
qse_awk_fnc_t* sys;
qse_map_t* user;
qse_htb_t* user;
} fnc;
struct
@ -253,7 +253,7 @@ struct qse_awk_chain_t
struct qse_awk_rtx_t
{
int id;
qse_map_t* named;
qse_htb_t* named;
void** stack;
qse_size_t stack_top;

View File

@ -1,5 +1,5 @@
/*
* $Id: fnc.c 312 2009-12-10 13:03:54Z hyunghwan.chung $
* $Id: fnc.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -20,8 +20,6 @@
#include "awk.h"
#include <qse/cmn/stdio.h>
static int fnc_close (qse_awk_rtx_t*, const qse_cstr_t*);
static int fnc_fflush (qse_awk_rtx_t*, const qse_cstr_t*);
static int fnc_index (qse_awk_rtx_t*, const qse_cstr_t*);
@ -129,7 +127,7 @@ void* qse_awk_addfnc (
fnc->handler = handler;
if (qse_map_insert (awk->fnc.user,
if (qse_htb_insert (awk->fnc.user,
(qse_char_t*)name, name_len, fnc, 0) == QSE_NULL)
{
QSE_AWK_FREE (awk, fnc);
@ -143,7 +141,7 @@ void* qse_awk_addfnc (
int qse_awk_delfnc (
qse_awk_t* awk, const qse_char_t* name, qse_size_t name_len)
{
if (qse_map_delete (awk->fnc.user, name, name_len) == -1)
if (qse_htb_delete (awk->fnc.user, name, name_len) == -1)
{
qse_cstr_t errarg;
@ -159,14 +157,14 @@ int qse_awk_delfnc (
void qse_awk_clrfnc (qse_awk_t* awk)
{
qse_map_clear (awk->fnc.user);
qse_htb_clear (awk->fnc.user);
}
qse_awk_fnc_t* qse_awk_getfnc (
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
{
qse_awk_fnc_t* fnc;
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
const qse_char_t* k;
qse_size_t l;
@ -176,13 +174,13 @@ qse_awk_fnc_t* qse_awk_getfnc (
if (fnc->valid != 0 &&
(awk->option & fnc->valid) != fnc->valid) continue;
pair = qse_map_search (
pair = qse_htb_search (
awk->wtab, fnc->name.ptr, fnc->name.len);
if (pair != QSE_NULL)
{
/* found in the customized word table */
k = QSE_MAP_VPTR(pair);
l = QSE_MAP_VLEN(pair);
k = QSE_HTB_VPTR(pair);
l = QSE_HTB_VLEN(pair);
}
else
{
@ -197,21 +195,21 @@ qse_awk_fnc_t* qse_awk_getfnc (
* because I'm trying to support qse_awk_setword in
* a very flimsy way here. Would it be better to drop
* qse_awk_setword totally? */
pair = qse_map_search (awk->rwtab, name, len);
pair = qse_htb_search (awk->rwtab, name, len);
if (pair != QSE_NULL)
{
/* the current name is a target name for
* one of the original word. */
k = QSE_MAP_VPTR(pair);
l = QSE_MAP_VLEN(pair);
k = QSE_HTB_VPTR(pair);
l = QSE_HTB_VLEN(pair);
}
else
{
pair = qse_map_search (awk->wtab, name, len);
pair = qse_htb_search (awk->wtab, name, len);
if (pair != QSE_NULL)
{
k = QSE_MAP_VPTR(pair);
l = QSE_MAP_VLEN(pair);
k = QSE_HTB_VPTR(pair);
l = QSE_HTB_VLEN(pair);
if (qse_strxncmp (name, len, k, l) != 0)
{
@ -235,10 +233,10 @@ qse_awk_fnc_t* qse_awk_getfnc (
}
/* END NOTE */
pair = qse_map_search (awk->fnc.user, k, l);
pair = qse_htb_search (awk->fnc.user, k, l);
if (pair == QSE_NULL) return QSE_NULL;
fnc = (qse_awk_fnc_t*)QSE_MAP_VPTR(pair);
fnc = (qse_awk_fnc_t*)QSE_HTB_VPTR(pair);
if (fnc->valid != 0 && (awk->option & fnc->valid) == 0) return QSE_NULL;
return fnc;
@ -856,7 +854,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_cstr_t* fnm)
* it is decremented if the assignement fails. */
qse_awk_rtx_refupval (run, t2);
if (qse_map_insert (
if (qse_htb_insert (
((qse_awk_val_map_t*)t1)->map,
key, key_len, t2, 0) == QSE_NULL)
{
@ -870,7 +868,7 @@ static int fnc_split (qse_awk_rtx_t* run, const qse_cstr_t* fnm)
if (fs_rex_free != QSE_NULL)
QSE_AWK_FREEREX (run->awk, fs_rex_free);
/* qse_map_insert() fails if the key exists.
/* qse_htb_insert() fails if the key exists.
* that can't happen here. so set the error code
* to ENOMEM */
qse_awk_rtx_seterrnum (run, QSE_AWK_ENOMEM, QSE_NULL);

View File

@ -1,5 +1,5 @@
/*
* $Id: parse.c 323 2010-04-05 12:50:01Z hyunghwan.chung $
* $Id: parse.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -228,8 +228,8 @@ static int classify_ident (
qse_awk_t* awk, const qse_char_t* name, qse_size_t len);
static int deparse (qse_awk_t* awk);
static qse_map_walk_t deparse_func (
qse_map_t* map, qse_map_pair_t* pair, void* arg);
static qse_htb_walk_t deparse_func (
qse_htb_t* map, qse_htb_pair_t* pair, void* arg);
static int put_char (qse_awk_t* awk, qse_char_t c);
static int flush_out (qse_awk_t* awk);
@ -495,16 +495,16 @@ const qse_char_t* qse_awk_getgblname (
qse_cstr_t* qse_awk_getkw (qse_awk_t* awk, int id, qse_cstr_t* s)
{
qse_map_pair_t* p;
qse_htb_pair_t* p;
s->ptr = kwtab[id].name;
s->len = kwtab[id].namelen;
p = qse_map_search (awk->wtab, s->ptr, s->len);
p = qse_htb_search (awk->wtab, s->ptr, s->len);
if (p != QSE_NULL)
{
s->ptr = QSE_MAP_VPTR(p);
s->len = QSE_MAP_VLEN(p);
s->ptr = QSE_HTB_VPTR(p);
s->len = QSE_HTB_VLEN(p);
}
return s;
@ -558,31 +558,31 @@ static int parse (qse_awk_t* awk)
/* ensure that all functions called are defined
* in the EXPLICIT-only mode */
qse_map_pair_t* p;
qse_htb_pair_t* p;
qse_size_t buckno;
p = qse_map_getfirstpair (awk->parse.funs, &buckno);
p = qse_htb_getfirstpair (awk->parse.funs, &buckno);
while (p != QSE_NULL)
{
if (qse_map_search (awk->tree.funs,
QSE_MAP_KPTR(p), QSE_MAP_KLEN(p)) == QSE_NULL)
if (qse_htb_search (awk->tree.funs,
QSE_HTB_KPTR(p), QSE_HTB_KLEN(p)) == QSE_NULL)
{
qse_awk_nde_call_t* call;
/* see parse_fncall() for what is
* stored into awk->tree.funs */
call = (qse_awk_nde_call_t*)QSE_MAP_VPTR(p);
call = (qse_awk_nde_call_t*)QSE_HTB_VPTR(p);
SETERR_ARG_LOC (
awk,
QSE_AWK_EFUNNF,
QSE_MAP_KPTR(p),
QSE_MAP_KLEN(p),
QSE_HTB_KPTR(p),
QSE_HTB_KLEN(p),
&call->loc
);
goto oops;
}
p = qse_map_getnextpair (awk->parse.funs, p, &buckno);
p = qse_htb_getnextpair (awk->parse.funs, p, &buckno);
}
}
}
@ -660,7 +660,7 @@ int qse_awk_parse (qse_awk_t* awk, qse_awk_sio_t* sio)
QSE_ASSERT (awk->parse.depth.cur.expr == 0);
qse_awk_clear (awk);
qse_map_clear (awk->sio.names);
qse_htb_clear (awk->sio.names);
awk->sio.inf = sio->in;
awk->sio.outf = sio->out;
@ -677,7 +677,7 @@ static int begin_include (qse_awk_t* awk)
{
qse_ssize_t op;
qse_awk_sio_arg_t* arg = QSE_NULL;
qse_map_pair_t* pair = QSE_NULL;
qse_htb_pair_t* pair = QSE_NULL;
if (qse_strlen(awk->tok.name->ptr) != QSE_STR_LEN(awk->tok.name))
{
@ -692,7 +692,7 @@ static int begin_include (qse_awk_t* awk)
}
/* store the file name to awk->sio.names */
pair = qse_map_ensert (
pair = qse_htb_ensert (
awk->sio.names,
QSE_STR_PTR(awk->tok.name),
QSE_STR_LEN(awk->tok.name) + 1, /* to include '\0' */
@ -704,8 +704,8 @@ static int begin_include (qse_awk_t* awk)
goto oops;
}
/*QSE_MAP_VPTR(pair) = QSE_MAP_KPTR(pair);
QSE_MAP_VLEN(pair) = QSE_MAP_KLEN(pair);*/
/*QSE_HTB_VPTR(pair) = QSE_HTB_KPTR(pair);
QSE_HTB_VLEN(pair) = QSE_HTB_KLEN(pair);*/
arg = (qse_awk_sio_arg_t*) QSE_MMGR_ALLOC (awk->mmgr, QSE_SIZEOF(*arg));
if (arg == QSE_NULL)
@ -715,7 +715,7 @@ static int begin_include (qse_awk_t* awk)
}
QSE_MEMSET (arg, 0, QSE_SIZEOF(*arg));
arg->name = QSE_MAP_KPTR(pair);
arg->name = QSE_HTB_KPTR(pair);
CLRERR (awk);
op = awk->sio.inf (awk, QSE_AWK_SIO_OPEN, arg, QSE_NULL, 0);
@ -1051,7 +1051,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
qse_awk_nde_t* body;
qse_awk_fun_t* fun;
qse_size_t nargs, g;
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
/* eat up the keyword 'function' and get the next token */
QSE_ASSERT (MATCH(awk,TOK_FUNCTION));
@ -1077,7 +1077,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
}
/* check if it has already been defined as a function */
if (qse_map_search (awk->tree.funs, name, namelen) != QSE_NULL)
if (qse_htb_search (awk->tree.funs, name, namelen) != QSE_NULL)
{
/* the function is defined previously */
SETERR_ARG_LOC (
@ -1086,7 +1086,7 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
}
/* check if it conflicts with a named variable */
if (qse_map_search (awk->parse.named, name, namelen) != QSE_NULL)
if (qse_htb_search (awk->parse.named, name, namelen) != QSE_NULL)
{
SETERR_ARG_LOC (
awk, QSE_AWK_EVARRED, name, namelen, &awk->tok.loc);
@ -1317,10 +1317,10 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
fun->nargs = nargs;
fun->body = body;
pair = qse_map_insert (awk->tree.funs, namedup, namelen, fun, 0);
pair = qse_htb_insert (awk->tree.funs, namedup, namelen, fun, 0);
if (pair == QSE_NULL)
{
/* if qse_map_insert() fails for other reasons than memory
/* if qse_htb_insert() fails for other reasons than memory
* shortage, there should be implementaion errors as duplicate
* functions are detected earlier in this function */
QSE_AWK_FREE (awk, namedup);
@ -1332,12 +1332,12 @@ static qse_awk_nde_t* parse_function (qse_awk_t* awk)
/* do some trick to save a string. make it back-point at the key part
* of the pair */
fun->name.ptr = QSE_MAP_KPTR(pair);
fun->name.len = QSE_MAP_KLEN(pair);
fun->name.ptr = QSE_HTB_KPTR(pair);
fun->name.len = QSE_HTB_KLEN(pair);
QSE_AWK_FREE (awk, namedup);
/* remove an undefined function call entry from the parse.fun table */
qse_map_delete (awk->parse.funs, fun->name.ptr, namelen);
qse_htb_delete (awk->parse.funs, fun->name.ptr, namelen);
return body;
}
@ -1685,9 +1685,9 @@ static qse_lda_walk_t check_global (qse_lda_t* lda, qse_size_t index, void* arg)
if (index < awk->tree.ngbls_base)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
pair = qse_map_search (awk->wtab, tmp.ptr, tmp.len);
pair = qse_htb_search (awk->wtab, tmp.ptr, tmp.len);
if (pair != QSE_NULL)
{
tmp.ptr = ((qse_cstr_t*)(pair->vptr))->ptr;
@ -1753,7 +1753,7 @@ static int add_global (
}
/* check if it conflicts with a function name */
if (qse_map_search (awk->tree.funs, name, len) != QSE_NULL)
if (qse_htb_search (awk->tree.funs, name, len) != QSE_NULL)
{
SETERR_ARG_LOC (awk, QSE_AWK_EFUNRED, name, len, xloc);
return -1;
@ -1761,7 +1761,7 @@ static int add_global (
/* check if it conflicts with a function name
* caught in the function call table */
if (qse_map_search (awk->parse.funs, name, len) != QSE_NULL)
if (qse_htb_search (awk->parse.funs, name, len) != QSE_NULL)
{
SETERR_ARG_LOC (awk, QSE_AWK_EFUNRED, name, len, xloc);
return -1;
@ -1781,7 +1781,7 @@ static int add_global (
* global X;
* function x() { print X++; }
*/
if (qse_map_search (awk->parse.named, name, len) != QSE_NULL)
if (qse_htb_search (awk->parse.named, name, len) != QSE_NULL)
{
SETERR_ARG_LOC (awk, QSE_AWK_EVARRED, name, len, xloc);
return -1;
@ -1842,13 +1842,13 @@ int qse_awk_addgbl (qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
return n;
}
#define QSE_AWK_NUM_STATIC_GBLS \
(QSE_AWK_MAX_GBL_ID-QSE_AWK_MIN_GBL_ID+1)
int qse_awk_delgbl (
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
{
qse_size_t n;
#define QSE_AWK_NUM_STATIC_GBLS \
(QSE_AWK_MAX_GBL_ID-QSE_AWK_MIN_GBL_ID+1)
if (awk->tree.ngbls > awk->tree.ngbls_base)
{
@ -1880,6 +1880,22 @@ int qse_awk_delgbl (
return 0;
}
int qse_awk_findgbl (
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
{
qse_size_t n;
n = qse_lda_search (awk->parse.gbls,
QSE_AWK_NUM_STATIC_GBLS, name, len);
if (n == QSE_LDA_NIL)
{
SETERR_ARG (awk, QSE_AWK_ENOENT, name, len);
return -1;
}
return (int)n;
}
static qse_awk_t* collect_globals (qse_awk_t* awk)
{
if (MATCH(awk,TOK_NEWLINE))
@ -4413,13 +4429,13 @@ static int isfnname (qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
}
}
if (qse_map_search (awk->tree.funs, name, len) != QSE_NULL)
if (qse_htb_search (awk->tree.funs, name, len) != QSE_NULL)
{
/* one of the functions defined previously */
return 2;
}
if (qse_map_search (awk->parse.funs, name, len) != QSE_NULL)
if (qse_htb_search (awk->parse.funs, name, len) != QSE_NULL)
{
/* one of the function calls not resolved so far. */
return 2;
@ -4648,7 +4664,7 @@ static qse_awk_nde_t* parse_primary_ident (
}
/* must be a function name */
QSE_ASSERT (qse_map_search (
QSE_ASSERT (qse_htb_search (
awk->parse.named, namedup, namelen) == QSE_NULL);
nde = parse_fncall (
@ -4665,7 +4681,7 @@ static qse_awk_nde_t* parse_primary_ident (
qse_awk_nde_t* nde;
/* a function call to a yet undefined function */
if (qse_map_search (awk->parse.named,
if (qse_htb_search (awk->parse.named,
namedup, namelen) != QSE_NULL)
{
/* a function call conflicts with a named variable */
@ -4705,7 +4721,7 @@ static qse_awk_nde_t* parse_primary_ident (
/* collect unique instances of a named variable
* for reference */
if (qse_map_upsert (
if (qse_htb_upsert (
awk->parse.named,
namedup, namelen, QSE_NULL, 0) == QSE_NULL)
{
@ -5018,7 +5034,7 @@ make_node:
/* store a non-builtin function call into the awk->parse.funs
* table */
if (qse_map_upsert (
if (qse_htb_upsert (
awk->parse.funs, name, namelen, call, 0) == QSE_NULL)
{
QSE_AWK_FREE (awk, call);
@ -5707,7 +5723,7 @@ static int preget_token (qse_awk_t* awk)
static int classify_ident (
qse_awk_t* awk, const qse_char_t* name, qse_size_t len)
{
if (QSE_MAP_SIZE(awk->wtab) <= 0)
if (QSE_HTB_SIZE(awk->wtab) <= 0)
{
/* perform binary search if no custom words are specified */
@ -5746,7 +5762,7 @@ static int classify_ident (
{
/* perform linear search if there are any custom words set */
kwent_t* kwp, * end;
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
end = kwtab + QSE_COUNTOF(kwtab);
for (kwp = kwtab; kwp < end; kwp++)
@ -5757,7 +5773,7 @@ static int classify_ident (
if (kwp->valid != 0 &&
(awk->option & kwp->valid) != kwp->valid) continue;
pair = qse_map_search (awk->wtab, kwp->name, kwp->namelen);
pair = qse_htb_search (awk->wtab, kwp->name, kwp->namelen);
if (pair != QSE_NULL)
{
k = ((qse_cstr_t*)(pair->vptr))->ptr;
@ -5923,7 +5939,7 @@ static int deparse (qse_awk_t* awk)
df.tmp_len = QSE_COUNTOF(tmp);
df.ret = 0;
qse_map_walk (awk->tree.funs, deparse_func, &df);
qse_htb_walk (awk->tree.funs, deparse_func, &df);
if (df.ret <= -1)
{
EXIT_DEPARSE ();
@ -6029,29 +6045,29 @@ exit_deparse:
return n;
}
static qse_map_walk_t deparse_func (
qse_map_t* map, qse_map_pair_t* pair, void* arg)
static qse_htb_walk_t deparse_func (
qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
{
struct deparse_func_t* df = (struct deparse_func_t*)arg;
qse_awk_fun_t* fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
qse_awk_fun_t* fun = (qse_awk_fun_t*)QSE_HTB_VPTR(pair);
qse_size_t i, n;
qse_cstr_t kw;
QSE_ASSERT (qse_strxncmp (QSE_MAP_KPTR(pair), QSE_MAP_KLEN(pair), fun->name.ptr, fun->name.len) == 0);
QSE_ASSERT (qse_strxncmp (QSE_HTB_KPTR(pair), QSE_HTB_KLEN(pair), fun->name.ptr, fun->name.len) == 0);
#define PUT_C(x,c) \
if (put_char(x->awk,c)==-1) { \
x->ret = -1; return QSE_MAP_WALK_STOP; \
x->ret = -1; return QSE_HTB_WALK_STOP; \
}
#define PUT_S(x,str) \
if (qse_awk_putsrcstr(x->awk,str) <= -1) { \
x->ret = -1; return QSE_MAP_WALK_STOP; \
x->ret = -1; return QSE_HTB_WALK_STOP; \
}
#define PUT_SX(x,str,len) \
if (qse_awk_putsrcstrx (x->awk, str, len) <= -1) { \
x->ret = -1; return QSE_MAP_WALK_STOP; \
x->ret = -1; return QSE_HTB_WALK_STOP; \
}
qse_awk_getkw (df->awk, KW_FUNCTION, &kw);
@ -6085,7 +6101,7 @@ static qse_map_walk_t deparse_func (
}
PUT_C (df, QSE_T('\n'));
return QSE_MAP_WALK_FORWARD;
return QSE_HTB_WALK_FORWARD;
#undef PUT_C
#undef PUT_S

View File

@ -1,5 +1,5 @@
/*
* $Id: run.c 323 2010-04-05 12:50:01Z hyunghwan.chung $
* $Id: run.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -691,7 +691,7 @@ qse_mmgr_t* qse_awk_rtx_getmmgr (qse_awk_rtx_t* rtx)
return MMGR(rtx);
}
qse_map_t* qse_awk_rtx_getnvmap (qse_awk_rtx_t* rtx)
qse_htb_t* qse_awk_rtx_getnvmap (qse_awk_rtx_t* rtx)
{
return rtx->named;
}
@ -713,7 +713,7 @@ qse_awk_rtx_t* qse_awk_rtx_open (
awk->tree.begin == QSE_NULL &&
awk->tree.end == QSE_NULL &&
awk->tree.chain_size == 0 &&
qse_map_getsize(awk->tree.funs) == 0)
qse_htb_getsize(awk->tree.funs) == 0)
{
qse_awk_seterrnum (awk, QSE_AWK_ENOPER, QSE_NULL);
return QSE_NULL;
@ -773,13 +773,13 @@ void qse_awk_rtx_setrcb (qse_awk_rtx_t* rtx, qse_awk_rcb_t* rcb)
rtx->rcb = *rcb;
}
static void free_namedval (qse_map_t* map, void* dptr, qse_size_t dlen)
static void free_namedval (qse_htb_t* map, void* dptr, qse_size_t dlen)
{
qse_awk_rtx_refdownval (
*(qse_awk_rtx_t**)QSE_XTN(map), dptr);
}
static void same_namedval (qse_map_t* map, void* dptr, qse_size_t dlen)
static void same_namedval (qse_htb_t* map, void* dptr, qse_size_t dlen)
{
qse_awk_rtx_refdownval_nofree (
*(qse_awk_rtx_t**)QSE_XTN(map), dptr);
@ -844,7 +844,7 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
return -1;
}
rtx->named = qse_map_open (
rtx->named = qse_htb_open (
MMGR(rtx), QSE_SIZEOF(rtx), 1024, 70);
if (rtx->named == QSE_NULL)
{
@ -856,16 +856,16 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
return -1;
}
*(qse_awk_rtx_t**)QSE_XTN(rtx->named) = rtx;
qse_map_setcopier (rtx->named, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setfreeer (rtx->named, QSE_MAP_VAL, free_namedval);
qse_map_setkeeper (rtx->named, same_namedval);
qse_map_setscale (rtx->named, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (rtx->named, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setfreeer (rtx->named, QSE_HTB_VAL, free_namedval);
qse_htb_setkeeper (rtx->named, same_namedval);
qse_htb_setscale (rtx->named, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
rtx->format.tmp.ptr = (qse_char_t*)
QSE_AWK_ALLOC (rtx->awk, 4096*QSE_SIZEOF(qse_char_t*));
if (rtx->format.tmp.ptr == QSE_NULL)
{
qse_map_close (rtx->named);
qse_htb_close (rtx->named);
qse_str_fini (&rtx->format.fmt);
qse_str_fini (&rtx->format.out);
qse_str_fini (&rtx->inrec.linew);
@ -883,7 +883,7 @@ static int init_rtx (qse_awk_rtx_t* rtx, qse_awk_t* awk, qse_awk_rio_t* rio)
if (rtx->pattern_range_state == QSE_NULL)
{
QSE_AWK_FREE (rtx->awk, rtx->format.tmp.ptr);
qse_map_close (rtx->named);
qse_htb_close (rtx->named);
qse_str_fini (&rtx->format.fmt);
qse_str_fini (&rtx->format.out);
qse_str_fini (&rtx->inrec.linew);
@ -1014,7 +1014,7 @@ static void fini_rtx (qse_awk_rtx_t* rtx, int fini_globals)
}
/* destroy named variables */
qse_map_close (rtx->named);
qse_htb_close (rtx->named);
/* destroy values in free list */
while (rtx->fcache_count > 0)
@ -1082,7 +1082,7 @@ static int build_runarg (
* it has successfully been assigned into ARGV. */
qse_awk_rtx_refupval (rtx, v_tmp);
if (qse_map_upsert (
if (qse_htb_upsert (
((qse_awk_val_map_t*)v_argv)->map,
key, key_len, v_tmp, 0) == QSE_NULL)
{
@ -1508,7 +1508,7 @@ qse_awk_val_t* qse_awk_rtx_call (
qse_awk_rtx_t* rtx, const qse_char_t* name,
qse_awk_val_t** args, qse_size_t nargs)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
qse_awk_fun_t* fun;
struct capture_retval_data_t crdata;
qse_awk_val_t* v;
@ -1535,7 +1535,7 @@ qse_awk_val_t* qse_awk_rtx_call (
call.nargs = nargs;
/* find the function */
pair = qse_map_search (
pair = qse_htb_search (
rtx->awk->tree.funs,
call.what.fun.name.ptr,
call.what.fun.name.len
@ -1548,7 +1548,7 @@ qse_awk_val_t* qse_awk_rtx_call (
return QSE_NULL;
}
fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
fun = (qse_awk_fun_t*)QSE_HTB_VPTR(pair);
QSE_ASSERT (fun != QSE_NULL);
/* check if the number of arguments given is more than expected */
@ -2216,19 +2216,19 @@ struct foreach_walker_t
int ret;
};
static qse_map_walk_t walk_foreach (
qse_map_t* map, qse_map_pair_t* pair, void* arg)
static qse_htb_walk_t walk_foreach (
qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
{
struct foreach_walker_t* w = (struct foreach_walker_t*)arg;
qse_awk_val_t* str;
str = (qse_awk_val_t*) qse_awk_rtx_makestrval (
w->rtx, QSE_MAP_KPTR(pair), QSE_MAP_KLEN(pair));
w->rtx, QSE_HTB_KPTR(pair), QSE_HTB_KLEN(pair));
if (str == QSE_NULL)
{
ADJERR_LOC (w->rtx, &w->var->loc);
w->ret = -1;
return QSE_MAP_WALK_STOP;
return QSE_HTB_WALK_STOP;
}
qse_awk_rtx_refupval (w->rtx, str);
@ -2236,14 +2236,14 @@ static qse_map_walk_t walk_foreach (
{
qse_awk_rtx_refdownval (w->rtx, str);
w->ret = -1;
return QSE_MAP_WALK_STOP;
return QSE_HTB_WALK_STOP;
}
if (run_statement (w->rtx, w->body) == -1)
{
qse_awk_rtx_refdownval (w->rtx, str);
w->ret = -1;
return QSE_MAP_WALK_STOP;
return QSE_HTB_WALK_STOP;
}
qse_awk_rtx_refdownval (w->rtx, str);
@ -2251,7 +2251,7 @@ static qse_map_walk_t walk_foreach (
if (w->rtx->exit_level == EXIT_BREAK)
{
w->rtx->exit_level = EXIT_NONE;
return QSE_MAP_WALK_STOP;
return QSE_HTB_WALK_STOP;
}
else if (w->rtx->exit_level == EXIT_CONTINUE)
{
@ -2259,17 +2259,17 @@ static qse_map_walk_t walk_foreach (
}
else if (w->rtx->exit_level != EXIT_NONE)
{
return QSE_MAP_WALK_STOP;
return QSE_HTB_WALK_STOP;
}
return QSE_MAP_WALK_FORWARD;
return QSE_HTB_WALK_FORWARD;
}
static int run_foreach (qse_awk_rtx_t* rtx, qse_awk_nde_foreach_t* nde)
{
qse_awk_nde_exp_t* test;
qse_awk_val_t* rv;
qse_map_t* map;
qse_htb_t* map;
struct foreach_walker_t walker;
test = (qse_awk_nde_exp_t*)nde->test;
@ -2303,7 +2303,7 @@ static int run_foreach (qse_awk_rtx_t* rtx, qse_awk_nde_foreach_t* nde)
walker.var = test->left;
walker.body = nde->body;
walker.ret = 0;
qse_map_walk (map, walk_foreach, &walker);
qse_htb_walk (map, walk_foreach, &walker);
qse_awk_rtx_refdownval (rtx, rv);
return walker.ret;
@ -2477,7 +2477,7 @@ static int run_nextfile (qse_awk_rtx_t* rtx, qse_awk_nde_nextfile_t* nde)
}
static int delete_indexed (
qse_awk_rtx_t* rtx, qse_map_t* map, qse_awk_nde_var_t* var)
qse_awk_rtx_t* rtx, qse_htb_t* map, qse_awk_nde_var_t* var)
{
qse_awk_val_t* idx;
@ -2492,7 +2492,7 @@ static int delete_indexed (
{
/* delete x["abc"] */
qse_map_delete (
qse_htb_delete (
map,
((qse_awk_val_str_t*)idx)->ptr,
((qse_awk_val_str_t*)idx)->len
@ -2532,7 +2532,7 @@ static int delete_indexed (
keylen = (out.type == QSE_AWK_RTX_VALTOSTR_CPL)?
out.u.cpl.len: out.u.cpldup.len;
qse_map_delete (map, key, keylen);
qse_htb_delete (map, key, keylen);
if (key != buf) QSE_AWK_FREE (rtx->awk, key);
}
@ -2549,14 +2549,14 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
if (var->type == QSE_AWK_NDE_NAMED ||
var->type == QSE_AWK_NDE_NAMEDIDX)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
QSE_ASSERTX (
(var->type == QSE_AWK_NDE_NAMED && var->idx == QSE_NULL) ||
(var->type == QSE_AWK_NDE_NAMEDIDX && var->idx != QSE_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 = qse_map_search (
pair = qse_htb_search (
rtx->named, var->id.name.ptr, var->id.name.len);
if (pair == QSE_NULL)
{
@ -2573,7 +2573,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
return -1;
}
pair = qse_map_upsert (rtx->named,
pair = qse_htb_upsert (rtx->named,
var->id.name.ptr, var->id.name.len, tmp, 0);
if (pair == QSE_NULL)
{
@ -2590,9 +2590,9 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
else
{
qse_awk_val_t* val;
qse_map_t* map;
qse_htb_t* map;
val = (qse_awk_val_t*)QSE_MAP_VPTR(pair);
val = (qse_awk_val_t*)QSE_HTB_VPTR(pair);
QSE_ASSERT (val != QSE_NULL);
if (val->type != QSE_AWK_VAL_MAP)
@ -2613,7 +2613,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
}
else
{
qse_map_clear (map);
qse_htb_clear (map);
}
}
}
@ -2678,7 +2678,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
}
else
{
qse_map_t* map;
qse_htb_t* map;
if (val->type != QSE_AWK_VAL_MAP)
{
@ -2700,7 +2700,7 @@ static int run_delete (qse_awk_rtx_t* rtx, qse_awk_nde_delete_t* nde)
}
else
{
qse_map_clear (map);
qse_htb_clear (map);
}
}
}
@ -2731,7 +2731,7 @@ static int run_reset (qse_awk_rtx_t* rtx, qse_awk_nde_reset_t* nde)
/* a named variable can be reset if removed from a internal map
to manage it */
qse_map_delete (rtx->named, var->id.name.ptr, var->id.name.len);
qse_htb_delete (rtx->named, var->id.name.ptr, var->id.name.len);
}
else if (var->type == QSE_AWK_NDE_GBL ||
var->type == QSE_AWK_NDE_LCL ||
@ -3368,12 +3368,12 @@ static qse_awk_val_t* do_assignment_scalar (
if (var->type == QSE_AWK_NDE_NAMED)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
pair = qse_map_search (
pair = qse_htb_search (
run->named, var->id.name.ptr, var->id.name.len);
if (pair != QSE_NULL &&
((qse_awk_val_t*)QSE_MAP_VPTR(pair))->type == QSE_AWK_VAL_MAP)
((qse_awk_val_t*)QSE_HTB_VPTR(pair))->type == QSE_AWK_VAL_MAP)
{
/* once a variable becomes a map,
* it cannot be changed to a scalar variable */
@ -3383,7 +3383,7 @@ static qse_awk_val_t* do_assignment_scalar (
return QSE_NULL;
}
if (qse_map_upsert (run->named,
if (qse_htb_upsert (run->named,
var->id.name.ptr, var->id.name.len, val, 0) == QSE_NULL)
{
SETERR_LOC (run, QSE_AWK_ENOMEM, &var->loc);
@ -3455,12 +3455,12 @@ static qse_awk_val_t* do_assignment_map (
if (var->type == QSE_AWK_NDE_NAMEDIDX)
{
qse_map_pair_t* pair;
pair = qse_map_search (
qse_htb_pair_t* pair;
pair = qse_htb_search (
run->named, var->id.name.ptr, var->id.name.len);
map = (pair == QSE_NULL)?
(qse_awk_val_map_t*)qse_awk_val_nil:
(qse_awk_val_map_t*)QSE_MAP_VPTR(pair);
(qse_awk_val_map_t*)QSE_HTB_VPTR(pair);
}
else
{
@ -3487,8 +3487,8 @@ static qse_awk_val_t* do_assignment_map (
{
/* doesn't have to decrease the reference count
* of the previous value here as it is done by
* qse_map_upsert */
if (qse_map_upsert (
* qse_htb_upsert */
if (qse_htb_upsert (
run->named,
var->id.name.ptr,
var->id.name.len,
@ -3546,7 +3546,7 @@ static qse_awk_val_t* do_assignment_map (
str, (int)map->ref, (int)map->type);
#endif
if (qse_map_upsert (map->map, str, len, val, 0) == QSE_NULL)
if (qse_htb_upsert (map->map, str, len, val, 0) == QSE_NULL)
{
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
SETERR_LOC (run, QSE_AWK_ENOMEM, &var->loc);
@ -3862,10 +3862,10 @@ static qse_awk_val_t* eval_binop_in (
else if (rv->type == QSE_AWK_VAL_MAP)
{
qse_awk_val_t* res;
qse_map_t* map;
qse_htb_t* map;
map = ((qse_awk_val_map_t*)rv)->map;
res = (qse_map_search (map, str, len) == QSE_NULL)?
res = (qse_htb_search (map, str, len) == QSE_NULL)?
qse_awk_val_zero: qse_awk_val_one;
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
@ -5429,9 +5429,9 @@ static qse_awk_val_t* eval_fun_ex (
{
qse_awk_nde_call_t* call = (qse_awk_nde_call_t*)nde;
qse_awk_fun_t* fun;
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
pair = qse_map_search (rtx->awk->tree.funs,
pair = qse_htb_search (rtx->awk->tree.funs,
call->what.fun.name.ptr, call->what.fun.name.len);
if (pair == QSE_NULL)
{
@ -5441,7 +5441,7 @@ static qse_awk_val_t* eval_fun_ex (
return QSE_NULL;
}
fun = (qse_awk_fun_t*)QSE_MAP_VPTR(pair);
fun = (qse_awk_fun_t*)QSE_HTB_VPTR(pair);
QSE_ASSERT (fun != QSE_NULL);
if (call->nargs > fun->nargs)
@ -5862,16 +5862,16 @@ static int get_reference (
if (nde->type == QSE_AWK_NDE_NAMED)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
pair = qse_map_search (
pair = qse_htb_search (
run->named, tgt->id.name.ptr, tgt->id.name.len);
if (pair == QSE_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 = qse_map_upsert (
pair = qse_htb_upsert (
run->named, tgt->id.name.ptr,
tgt->id.name.len, qse_awk_val_nil, 0);
if (pair == QSE_NULL)
@ -5881,7 +5881,7 @@ static int get_reference (
}
}
*ref = (qse_awk_val_t**)&QSE_MAP_VPTR(pair);
*ref = (qse_awk_val_t**)&QSE_HTB_VPTR(pair);
return 0;
}
@ -5905,13 +5905,13 @@ static int get_reference (
if (nde->type == QSE_AWK_NDE_NAMEDIDX)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
pair = qse_map_search (
pair = qse_htb_search (
run->named, tgt->id.name.ptr, tgt->id.name.len);
if (pair == QSE_NULL)
{
pair = qse_map_upsert (
pair = qse_htb_upsert (
run->named, tgt->id.name.ptr,
tgt->id.name.len, qse_awk_val_nil, 0);
if (pair == QSE_NULL)
@ -5922,7 +5922,7 @@ static int get_reference (
}
tmp = get_reference_indexed (
run, tgt, (qse_awk_val_t**)&QSE_MAP_VPTR(pair));
run, tgt, (qse_awk_val_t**)&QSE_HTB_VPTR(pair));
if (tmp == QSE_NULL) return -1;
*ref = tmp;
}
@ -5990,7 +5990,7 @@ static int get_reference (
static qse_awk_val_t** get_reference_indexed (
qse_awk_rtx_t* run, qse_awk_nde_var_t* nde, qse_awk_val_t** val)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
qse_char_t* str;
qse_size_t len;
qse_char_t idxbuf[IDXBUFSIZE];
@ -6024,10 +6024,10 @@ static qse_awk_val_t** get_reference_indexed (
str = idxnde_to_str (run, nde->idx, idxbuf, &len);
if (str == QSE_NULL) return QSE_NULL;
pair = qse_map_search ((*(qse_awk_val_map_t**)val)->map, str, len);
pair = qse_htb_search ((*(qse_awk_val_map_t**)val)->map, str, len);
if (pair == QSE_NULL)
{
pair = qse_map_upsert (
pair = qse_htb_upsert (
(*(qse_awk_val_map_t**)val)->map,
str, len, qse_awk_val_nil, 0);
if (pair == QSE_NULL)
@ -6037,11 +6037,11 @@ static qse_awk_val_t** get_reference_indexed (
return QSE_NULL;
}
qse_awk_rtx_refupval (run, QSE_MAP_VPTR(pair));
qse_awk_rtx_refupval (run, QSE_HTB_VPTR(pair));
}
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
return (qse_awk_val_t**)&QSE_MAP_VPTR(pair);
return (qse_awk_val_t**)&QSE_HTB_VPTR(pair);
}
static qse_awk_val_t* eval_int (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
@ -6109,13 +6109,13 @@ static qse_awk_val_t* eval_rex (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
static qse_awk_val_t* eval_named (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
pair = qse_map_search (run->named,
pair = qse_htb_search (run->named,
((qse_awk_nde_var_t*)nde)->id.name.ptr,
((qse_awk_nde_var_t*)nde)->id.name.len);
return (pair == QSE_NULL)? qse_awk_val_nil: QSE_MAP_VPTR(pair);
return (pair == QSE_NULL)? qse_awk_val_nil: QSE_HTB_VPTR(pair);
}
static qse_awk_val_t* eval_gbl (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
@ -6136,7 +6136,7 @@ static qse_awk_val_t* eval_arg (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
static qse_awk_val_t* eval_indexed (
qse_awk_rtx_t* run, qse_awk_nde_var_t* nde, qse_awk_val_t** val)
{
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
qse_char_t* str;
qse_size_t len;
qse_char_t idxbuf[IDXBUFSIZE];
@ -6170,22 +6170,22 @@ static qse_awk_val_t* eval_indexed (
str = idxnde_to_str (run, nde->idx, idxbuf, &len);
if (str == QSE_NULL) return QSE_NULL;
pair = qse_map_search ((*(qse_awk_val_map_t**)val)->map, str, len);
pair = qse_htb_search ((*(qse_awk_val_map_t**)val)->map, str, len);
if (str != idxbuf) QSE_AWK_FREE (run->awk, str);
return (pair == QSE_NULL)? qse_awk_val_nil:
(qse_awk_val_t*)QSE_MAP_VPTR(pair);
(qse_awk_val_t*)QSE_HTB_VPTR(pair);
}
static qse_awk_val_t* eval_namedidx (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
{
qse_awk_nde_var_t* tgt = (qse_awk_nde_var_t*)nde;
qse_map_pair_t* pair;
qse_htb_pair_t* pair;
pair = qse_map_search (run->named, tgt->id.name.ptr, tgt->id.name.len);
pair = qse_htb_search (run->named, tgt->id.name.ptr, tgt->id.name.len);
if (pair == QSE_NULL)
{
pair = qse_map_upsert (run->named,
pair = qse_htb_upsert (run->named,
tgt->id.name.ptr, tgt->id.name.len, qse_awk_val_nil, 0);
if (pair == QSE_NULL)
{
@ -6193,10 +6193,10 @@ static qse_awk_val_t* eval_namedidx (qse_awk_rtx_t* run, qse_awk_nde_t* nde)
return QSE_NULL;
}
qse_awk_rtx_refupval (run, QSE_MAP_VPTR(pair));
qse_awk_rtx_refupval (run, QSE_HTB_VPTR(pair));
}
return eval_indexed (run, tgt, (qse_awk_val_t**)&QSE_MAP_VPTR(pair));
return eval_indexed (run, tgt, (qse_awk_val_t**)&QSE_HTB_VPTR(pair));
}
static qse_awk_val_t* eval_gblidx (qse_awk_rtx_t* run, qse_awk_nde_t* nde)

View File

@ -1,5 +1,5 @@
/*
* $Id: std.c 320 2009-12-21 12:29:52Z hyunghwan.chung $
* $Id: std.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -800,8 +800,8 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod)
qse_sio_t* sio;
const qse_char_t* file;
qse_awk_val_t* argv;
qse_map_t* map;
qse_map_pair_t* pair;
qse_htb_t* map;
qse_htb_pair_t* pair;
qse_char_t ibuf[128];
qse_size_t ibuflen;
qse_awk_val_t* v;
@ -849,10 +849,10 @@ static int open_rio_console (qse_awk_rtx_t* rtx, qse_awk_rio_arg_t* riod)
rtx->awk, rxtn->c.in.index + 1, 10, QSE_NULL,
ibuf, QSE_COUNTOF(ibuf));
pair = qse_map_search (map, ibuf, ibuflen);
pair = qse_htb_search (map, ibuf, ibuflen);
QSE_ASSERT (pair != QSE_NULL);
v = QSE_MAP_VPTR(pair);
v = QSE_HTB_VPTR(pair);
QSE_ASSERT (v != QSE_NULL);
out.type = QSE_AWK_RTX_VALTOSTR_CPLDUP;

View File

@ -1,5 +1,5 @@
/*
* $Id: val.c 312 2009-12-10 13:03:54Z hyunghwan.chung $
* $Id: val.c 328 2010-07-08 06:58:44Z hyunghwan.chung $
*
Copyright 2006-2009 Chung, Hyung-Hwan.
This file is part of QSE.
@ -362,7 +362,7 @@ qse_awk_val_t* qse_awk_rtx_makerexval (
return (qse_awk_val_t*)val;
}
static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
static void free_mapval (qse_htb_t* map, void* dptr, qse_size_t dlen)
{
qse_awk_rtx_t* rtx = *(qse_awk_rtx_t**)QSE_XTN(map);
@ -375,7 +375,7 @@ static void free_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
qse_awk_rtx_refdownval (rtx, dptr);
}
static void same_mapval (qse_map_t* map, void* dptr, qse_size_t dlen)
static void same_mapval (qse_htb_t* map, void* dptr, qse_size_t dlen)
{
qse_awk_rtx_t* run = *(qse_awk_rtx_t**)QSE_XTN(map);
#ifdef DEBUG_VAL
@ -403,7 +403,7 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
val->type = QSE_AWK_VAL_MAP;
val->ref = 0;
val->nstr = 0;
val->map = qse_map_open (
val->map = qse_htb_open (
run, 256, 70, free_mapval, same_mapval, run->awk->mmgr);
if (val->map == QSE_NULL)
{
@ -416,7 +416,7 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
val = (qse_awk_val_map_t*) QSE_AWK_ALLOC (
rtx->awk,
QSE_SIZEOF(qse_awk_val_map_t) +
QSE_SIZEOF(qse_map_t) +
QSE_SIZEOF(qse_htb_t) +
QSE_SIZEOF(rtx));
if (val == QSE_NULL)
{
@ -427,9 +427,9 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
val->type = QSE_AWK_VAL_MAP;
val->ref = 0;
val->nstr = 0;
val->map = (qse_map_t*)(val + 1);
val->map = (qse_htb_t*)(val + 1);
val->map = qse_map_init (val->map, rtx->awk->mmgr, 256, 70);
val->map = qse_htb_init (val->map, rtx->awk->mmgr, 256, 70);
if (val->map == QSE_NULL)
{
QSE_AWK_FREE (rtx->awk, val);
@ -440,14 +440,14 @@ qse_awk_val_t* qse_awk_rtx_makemapval (qse_awk_rtx_t* rtx)
/* the key is copied inline into a pair and is freed when the pair
* is destroyed */
qse_map_setcopier (val->map, QSE_MAP_KEY, QSE_MAP_COPIER_INLINE);
qse_map_setscale (val->map, QSE_MAP_KEY, QSE_SIZEOF(qse_char_t));
qse_htb_setcopier (val->map, QSE_HTB_KEY, QSE_HTB_COPIER_INLINE);
qse_htb_setscale (val->map, QSE_HTB_KEY, QSE_SIZEOF(qse_char_t));
/* not setting copier for a value means that the pointer to the data
* allocated somewhere else is remembered in a pair. but the freeing
* the actual value is handled by free_mapval and same_mapval */
qse_map_setfreeer (val->map, QSE_MAP_VAL, free_mapval);
qse_map_setkeeper (val->map, same_mapval);
qse_htb_setfreeer (val->map, QSE_HTB_VAL, free_mapval);
qse_htb_setkeeper (val->map, same_mapval);
/* END CHECK */
return (qse_awk_val_t*)val;
@ -559,7 +559,7 @@ void qse_awk_rtx_freeval (
}
else if (val->type == QSE_AWK_VAL_MAP)
{
qse_map_fini (((qse_awk_val_map_t*)val)->map);
qse_htb_fini (((qse_awk_val_map_t*)val)->map);
QSE_AWK_FREE (rtx->awk, val);
}
else if (val->type == QSE_AWK_VAL_REF)
@ -1131,19 +1131,19 @@ int qse_awk_rtx_strtonum (
#define DPRINTF run->awk->prmfns->dprintf
#define DCUSTOM run->awk->prmfns->data
static qse_map_walk_t print_pair (
qse_map_t* map, qse_map_pair_t* pair, void* arg)
static qse_htb_walk_t print_pair (
qse_htb_t* map, qse_htb_pair_t* pair, void* arg)
{
qse_awk_rtx_t* run = (qse_awk_rtx_t*)arg;
QSE_ASSERT (run == *(qse_awk_rtx_t**)QSE_XTN(map));
DPRINTF (DCUSTOM, QSE_T(" %.*s=>"),
(int)QSE_MAP_KLEN(pair), QSE_MAP_KPTR(pair));
qse_awk_dprintval ((qse_awk_rtx_t*)arg, QSE_MAP_VPTR(pair));
(int)QSE_HTB_KLEN(pair), QSE_HTB_KPTR(pair));
qse_awk_dprintval ((qse_awk_rtx_t*)arg, QSE_HTB_VPTR(pair));
DPRINTF (DCUSTOM, QSE_T(" "));
return QSE_MAP_WALK_FORWARD;
return QSE_HTB_WALK_FORWARD;
}
void qse_awk_dprintval (qse_awk_rtx_t* run, qse_awk_val_t* val)
@ -1194,7 +1194,7 @@ void qse_awk_dprintval (qse_awk_rtx_t* run, qse_awk_val_t* val)
case QSE_AWK_VAL_MAP:
DPRINTF (DCUSTOM, QSE_T("MAP["));
qse_map_walk (((qse_awk_val_map_t*)val)->map, print_pair, run);
qse_htb_walk (((qse_awk_val_map_t*)val)->map, print_pair, run);
DPRINTF (DCUSTOM, QSE_T("]"));
break;