aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/pool/source/pool.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2004-10-30 03:59:01 +0000
committerThomas Grill <xovo@users.sourceforge.net>2004-10-30 03:59:01 +0000
commit3e1c082a5050a890eb05e81a5472f0c346600fb7 (patch)
tree115f5bb9c50ff2dab3b67bb0fbd70a1ea1c3df2f /externals/grill/pool/source/pool.cpp
parentf0de7e1aa940335ba2130f9f318539e2432c44a1 (diff)
better symbol handling
added seti, clri name changes for svn repository more inlined functions svn path=/trunk/; revision=2191
Diffstat (limited to 'externals/grill/pool/source/pool.cpp')
-rw-r--r--externals/grill/pool/source/pool.cpp35
1 files changed, 33 insertions, 2 deletions
diff --git a/externals/grill/pool/source/pool.cpp b/externals/grill/pool/source/pool.cpp
index a4f0805e..815d76a9 100644
--- a/externals/grill/pool/source/pool.cpp
+++ b/externals/grill/pool/source/pool.cpp
@@ -191,7 +191,7 @@ BL pooldir::DelDir(I argc,const A *argv)
V pooldir::SetVal(const A &key,AtomList *data,BL over)
{
- I c = 1,vix = VIdx(key);
+ I c = 1,vix = VIdx(key);
poolval *prv = NULL,*ix = vals[vix].v;
for(; ix; prv = ix,ix = ix->nxt) {
c = compare(key,ix->key);
@@ -228,6 +228,38 @@ V pooldir::SetVal(const A &key,AtomList *data,BL over)
}
}
+BL pooldir::SetVali(I rix,AtomList *data)
+{
+ poolval *prv = NULL,*ix = NULL;
+ for(I vix = 0; vix < vsize; ++vix)
+ if(rix > vals[vix].cnt) rix -= vals[vix].cnt;
+ else {
+ ix = vals[vix].v;
+ for(; ix && rix; prv = ix,ix = ix->nxt) --rix;
+ if(ix && !rix) break;
+ }
+
+ if(ix) {
+ // data exists... overwrite it
+
+ if(data)
+ ix->Set(data);
+ else {
+ // delete key
+
+ poolval *nv = ix->nxt;
+ if(prv) prv->nxt = nv;
+ else vals[vix].v = nv;
+ vals[vix].cnt--;
+ ix->nxt = NULL;
+ delete ix;
+ }
+ return true;
+ }
+ else
+ return false;
+}
+
poolval *pooldir::RefVal(const A &key)
{
I c = 1,vix = VIdx(key);
@@ -240,7 +272,6 @@ poolval *pooldir::RefVal(const A &key)
return c || !ix?NULL:ix;
}
-
poolval *pooldir::RefVali(I rix)
{
for(I vix = 0; vix < vsize; ++vix)