|
|
@@ -20,7 +20,7 @@ SQTable::SQTable(SQSharedState *ss,SQInteger nInitialSize)
|
|
|
|
|
|
void SQTable::Remove(const SQObjectPtr &key)
|
|
|
{
|
|
|
-
|
|
|
+
|
|
|
_HashNode *n = _Get(key, HashObj(key) & (_numofnodes - 1));
|
|
|
if (n) {
|
|
|
n->val.Null();
|
|
|
@@ -65,7 +65,7 @@ void SQTable::Rehash(bool force)
|
|
|
if (type(old->key) != OT_NULL)
|
|
|
NewSlot(old->key,old->val);
|
|
|
}
|
|
|
- for(SQInteger k=0;k<oldsize;k++)
|
|
|
+ for(SQInteger k=0;k<oldsize;k++)
|
|
|
nold[k].~_HashNode();
|
|
|
SQ_FREE(nold,oldsize*sizeof(_HashNode));
|
|
|
}
|
|
|
@@ -126,7 +126,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
|
|
return false;
|
|
|
}
|
|
|
_HashNode *mp = &_nodes[h];
|
|
|
- n = mp;
|
|
|
+ //n = mp;
|
|
|
|
|
|
|
|
|
//key not found I'll insert it
|
|
|
@@ -136,7 +136,7 @@ bool SQTable::NewSlot(const SQObjectPtr &key,const SQObjectPtr &val)
|
|
|
n = _firstfree; /* get a free place */
|
|
|
SQHash mph = HashObj(mp->key) & (_numofnodes - 1);
|
|
|
_HashNode *othern; /* main position of colliding node */
|
|
|
-
|
|
|
+
|
|
|
if (mp > n && (othern = &_nodes[mph]) != mp){
|
|
|
/* yes; move colliding node into free position */
|
|
|
while (othern->next != mp){
|