\r
#include "sqstring.h"\r
\r
-#define hashptr(p) (((SQHash)(p)) >> 3)\r
+\r
+#define hashptr(p) ((SQHash)(((SQInteger)p) >> 3))\r
+\r
+inline SQHash HashObj(const SQObjectPtr &key)\r
+{\r
+ switch(type(key)) {\r
+ case OT_STRING: return _string(key)->_hash;\r
+ case OT_FLOAT: return (SQHash)((SQInteger)_float(key));\r
+ case OT_BOOL: case OT_INTEGER: return (SQHash)((SQInteger)_integer(key));\r
+ default: return hashptr(key._unVal.pRefCounted);\r
+ }\r
+}\r
\r
struct SQTable : public SQDelegable \r
{\r
private:\r
struct _HashNode\r
{\r
+ _HashNode() { next = NULL; }\r
SQObjectPtr val;\r
SQObjectPtr key;\r
_HashNode *next;\r
#ifndef NO_GARBAGE_COLLECTOR \r
void Mark(SQCollectable **chain);\r
#endif\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 (SQHash)((SQInteger)_float(key));\r
- case OT_INTEGER: return (SQHash)((SQInteger)_integer(key));\r
- default: return hashptr(key._unVal.pRefCounted);\r
- }\r
- }\r
inline _HashNode *_Get(const SQObjectPtr &key,SQHash hash)\r
{\r
_HashNode *n = &_nodes[hash];\r
if(_rawval(n->key) == _rawval(key) && type(n->key) == type(key)){\r
return n;\r
}\r
- }while(n = n->next);\r
+ }while((n = n->next));\r
return NULL;\r
}\r
bool Get(const SQObjectPtr &key,SQObjectPtr &val);\r