aboutsummaryrefslogtreecommitdiff
path: root/externals/grill/flext/source/flsupport.cpp
diff options
context:
space:
mode:
authorThomas Grill <xovo@users.sourceforge.net>2005-04-18 15:07:41 +0000
committerThomas Grill <xovo@users.sourceforge.net>2005-04-18 15:07:41 +0000
commitd6d1febfad6698f55f077b7dd94330a46da83886 (patch)
treefc947ad11e4cd38cfd7d316b942600eb51b8b878 /externals/grill/flext/source/flsupport.cpp
parent9727e8625658520e5fdbfb0b9e9903ad540da648 (diff)
changed template parameter of TableMap
fixed problems with symbol binding restructured TableMap type (doesn't own pointers any more) svn path=/trunk/; revision=2779
Diffstat (limited to 'externals/grill/flext/source/flsupport.cpp')
-rw-r--r--externals/grill/flext/source/flsupport.cpp50
1 files changed, 26 insertions, 24 deletions
diff --git a/externals/grill/flext/source/flsupport.cpp b/externals/grill/flext/source/flsupport.cpp
index 3d9b1b03..5b33352c 100644
--- a/externals/grill/flext/source/flsupport.cpp
+++ b/externals/grill/flext/source/flsupport.cpp
@@ -308,11 +308,11 @@ TableAnyMap::~TableAnyMap() { clear(); }
void TableAnyMap::clear()
{
- if(left) { delete left; left = NULL; }
- if(right) { delete right; right = NULL; }
+ if(left) { _delmap(left); left = NULL; }
+ if(right) { _delmap(right); right = NULL; }
- for(int i = 0; i < n; ++i) Free(data[i].value);
- count = n = 0;
+// for(int i = 0; i < n; ++i) Free(data[i].value);
+ /*count = */n = 0;
}
/*
@@ -328,7 +328,7 @@ int TableAnyMap::size() const
}
*/
-bool TableAnyMap::_set(size_t k,void *t)
+void *TableAnyMap::_set(size_t k,void *t)
{
FLEXT_ASSERT(n);
@@ -341,29 +341,31 @@ bool TableAnyMap::_set(size_t k,void *t)
return _toright(k,t);
int ix = _tryix(k);
+ if(ix >= n) {
+ FLEXT_ASSERT(ix == n);
+ // after last entry
+ data[n++](k,t);
+// ++count;
+ return NULL;
+ }
+
size_t dk = data[ix].key;
if(k == dk) {
// update data in existing slot (same key)
- Free(data[ix].value);
+ void *a = data[ix].value;
data[ix] = t;
- return false;
- }
- else if(ix >= n) {
- FLEXT_ASSERT(ix == n);
- // after last entry
- data[n++](k,t);
- ++count;
- return true;
+ return a;
}
else {
// insert new slot by shifting the higher ones
FLEXT_ASSERT(k < dk);
- bool a;
+ void *a;
if(n == tsize)
a = _toright(data[tsize-1]);
else {
- ++n,++count;
- a = true;
+ ++n;
+// ++count;
+ a = NULL;
}
Data *tg = data+ix;
@@ -385,7 +387,7 @@ void *TableAnyMap::_find(size_t k) const
return right?right->_find(k):NULL;
const int ix = _tryix(k);
- return data[ix].key == k?data[ix].value:NULL;
+ return ix < n && data[ix].key == k?data[ix].value:NULL;
}
void *TableAnyMap::_remove(size_t k)
@@ -398,7 +400,7 @@ void *TableAnyMap::_remove(size_t k)
void *r = left?left->_remove(k):NULL;
if(r) {
_eraseempty(left);
- --count;
+// --count;
}
return r;
}
@@ -406,13 +408,13 @@ void *TableAnyMap::_remove(size_t k)
void *r = right?right->_remove(k):NULL;
if(r) {
_eraseempty(right);
- --count;
+// --count;
}
return r;
}
const int ix = _tryix(k);
- if(data[ix].key != k)
+ if(ix >= n || data[ix].key != k)
return NULL;
else {
// found key in this map
@@ -454,7 +456,7 @@ void *TableAnyMap::_remove(size_t k)
--n;
}
- --count;
+// --count;
return ret;
}
}
@@ -476,7 +478,7 @@ void TableAnyMap::_getbig(Data &dt)
else
dt = data[--n];
}
- --count;
+// --count;
}
void TableAnyMap::_getsmall(Data &dt)
@@ -497,7 +499,7 @@ void TableAnyMap::_getsmall(Data &dt)
else
--n;
}
- --count;
+// --count;
}
void TableAnyMap::iterator::forward()