this shouldn't be in svn
[supertux.git] / src / squirrel / squirrel / sqstate.h
index 13aa719..64892c4 100644 (file)
@@ -13,10 +13,6 @@ struct StringTable
 {\r
        StringTable();\r
        ~StringTable();\r
-       //return a string obj if exists\r
-       //so when there is a table query, if the string doesn't exists in the global state\r
-       //it cannot be in a table so the result will be always null\r
-       //SQString *get(const SQChar *news);\r
        SQString *Add(const SQChar *,SQInteger len);\r
        void Remove(SQString *);\r
 private:\r
@@ -27,6 +23,32 @@ private:
        SQUnsignedInteger _slotused;\r
 };\r
 \r
+struct RefTable {\r
+       struct RefNode {\r
+               SQObjectPtr obj;\r
+               SQUnsignedInteger refs;\r
+               struct RefNode *next;\r
+       };\r
+       RefTable();\r
+       ~RefTable();\r
+       void AddRef(SQObject &obj);\r
+       SQBool Release(SQObject &obj);\r
+#ifndef NO_GARBAGE_COLLECTOR\r
+       void Mark(SQCollectable **chain);\r
+#endif\r
+       void Finalize();\r
+private:\r
+       RefNode *Get(SQObject &obj,SQHash &mainpos,RefNode **prev,bool add);\r
+       RefNode *Add(SQHash mainpos,SQObject &obj);\r
+       void Resize(SQUnsignedInteger size);\r
+       void AllocNodes(SQUnsignedInteger size);\r
+       SQUnsignedInteger _numofslots;\r
+       SQUnsignedInteger _slotused;\r
+       SQUnsignedInteger _buffersize;\r
+       RefNode *_freelist;\r
+       RefNode **_buckets;\r
+};\r
+\r
 #define ADD_STRING(ss,str,len) ss->_stringtable->Add(str,len)\r
 #define REMOVE_STRING(ss,bstr) ss->_stringtable->Remove(bstr)\r
 \r
@@ -49,7 +71,7 @@ public:
        SQObjectPtrVec *_systemstrings;\r
        SQObjectPtrVec *_types;\r
        StringTable *_stringtable;\r
-       SQObjectPtr _refs_table;\r
+       RefTable _refs_table;\r
        SQObjectPtr _registry;\r
        SQObjectPtr _constructoridx;\r
 #ifndef NO_GARBAGE_COLLECTOR\r
@@ -80,6 +102,7 @@ public:
        SQCOMPILERERROR _compilererrorhandler;\r
        SQPRINTFUNCTION _printfunc;\r
        bool _debuginfo;\r
+       bool _notifyallexceptions;\r
 private:\r
        SQChar *_scratchpad;\r
        SQInteger _scratchpadsize;\r