\r
#include "sqstring.h"\r
\r
-#define hashptr(p) (((unsigned long)(p)) >> 3)\r
+#define hashptr(p) (((SQHash)(reinterpret_cast<long>(p))) >> 3)\r
\r
struct SQTable : public SQDelegable \r
{\r
};\r
_HashNode *_firstfree;\r
_HashNode *_nodes;\r
- int _numofnodes;\r
- int _usednodes;\r
+ SQInteger _numofnodes;\r
+ SQInteger _usednodes;\r
\r
///////////////////////////\r
- void AllocNodes(int nSize);\r
+ void AllocNodes(SQInteger nSize);\r
void Rehash(bool force);\r
- SQTable(SQSharedState *ss, int nInitialSize);\r
+ SQTable(SQSharedState *ss, SQInteger nInitialSize);\r
public:\r
- static SQTable* Create(SQSharedState *ss,int nInitialSize)\r
+ static SQTable* Create(SQSharedState *ss,SQInteger nInitialSize)\r
{\r
SQTable *newtable = (SQTable*)SQ_MALLOC(sizeof(SQTable));\r
new (newtable) SQTable(ss, nInitialSize);\r
{\r
SetDelegate(NULL);\r
REMOVE_FROM_CHAIN(&_sharedstate->_gc_chain, this);\r
- for (int i = 0; i < _numofnodes; i++) _nodes[i].~_HashNode();\r
+ for (SQInteger i = 0; i < _numofnodes; i++) _nodes[i].~_HashNode();\r
SQ_FREE(_nodes, _numofnodes * sizeof(_HashNode));\r
}\r
#ifndef NO_GARBAGE_COLLECTOR \r
void Mark(SQCollectable **chain);\r
#endif\r
- inline unsigned long HashKey(const SQObjectPtr &key)\r
+ inline SQHash HashKey(const SQObjectPtr &key)\r
{\r
switch(type(key)){\r
case OT_STRING: return _string(key)->_hash;\r
- case OT_FLOAT: return (unsigned long)((long)_float(key));\r
- case OT_INTEGER: return (unsigned long)((long)_integer(key));\r
+ case OT_FLOAT: return (SQHash)((SQInteger)_float(key));\r
+ case OT_INTEGER: return (SQHash)((SQInteger)_integer(key));\r
default: return hashptr(key._unVal.pRefCounted);\r
}\r
}\r
- _HashNode *_Get(const SQObjectPtr &key,unsigned long hash)\r
+ inline _HashNode *_Get(const SQObjectPtr &key,SQHash hash)\r
{\r
_HashNode *n = &_nodes[hash];\r
do{\r
bool Set(const SQObjectPtr &key, const SQObjectPtr &val);\r
//returns true if a new slot has been created false if it was already present\r
bool NewSlot(const SQObjectPtr &key,const SQObjectPtr &val);\r
- int Next(const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);\r
+ SQInteger Next(bool getweakrefs,const SQObjectPtr &refpos, SQObjectPtr &outkey, SQObjectPtr &outval);\r
\r
- int CountUsed();\r
+ SQInteger CountUsed(){ return _usednodes;}\r
void Release()\r
{\r
sq_delete(this, SQTable);\r
}\r
- bool SetDelegate(SQTable *mt);\r
\r
-\r
};\r
\r
#endif //_SQTABLE_H_\r