this shouldn't be in svn
[supertux.git] / src / squirrel / squirrel / sqstate.h
index 96acca8..64892c4 100644 (file)
@@ -13,18 +13,40 @@ 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 *,int len);\r
+       SQString *Add(const SQChar *,SQInteger len);\r
        void Remove(SQString *);\r
 private:\r
-       void Resize(int size);\r
-       void AllocNodes(int size);\r
+       void Resize(SQInteger size);\r
+       void AllocNodes(SQInteger size);\r
        SQString **_strings;\r
-       unsigned int _numofslots;\r
-       unsigned int _slotused;\r
+       SQUnsignedInteger _numofslots;\r
+       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
@@ -38,10 +60,10 @@ struct SQSharedState
        ~SQSharedState();\r
        void Init();\r
 public:\r
-       SQChar* GetScratchPad(int size);\r
+       SQChar* GetScratchPad(SQInteger size);\r
        SQInteger GetMetaMethodIdxByName(const SQObjectPtr &name);\r
 #ifndef NO_GARBAGE_COLLECTOR\r
-       int CollectGarbage(SQVM *vm); \r
+       SQInteger CollectGarbage(SQVM *vm); \r
        static void MarkObject(SQObjectPtr &o,SQCollectable **chain);\r
 #endif\r
        SQObjectPtrVec *_metamethods;\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
@@ -74,13 +96,16 @@ public:
        static SQRegFunction _class_default_delegate_funcz[];\r
        SQObjectPtr _instance_default_delegate;\r
        static SQRegFunction _instance_default_delegate_funcz[];\r
+       SQObjectPtr _weakref_default_delegate;\r
+       static SQRegFunction _weakref_default_delegate_funcz[];\r
        \r
        SQCOMPILERERROR _compilererrorhandler;\r
        SQPRINTFUNCTION _printfunc;\r
        bool _debuginfo;\r
+       bool _notifyallexceptions;\r
 private:\r
        SQChar *_scratchpad;\r
-       int _scratchpadsize;\r
+       SQInteger _scratchpadsize;\r
 };\r
 \r
 #define _sp(s) (_sharedstate->GetScratchPad(s))\r
@@ -95,6 +120,7 @@ private:
 #define _thread_ddel   _table(_sharedstate->_thread_default_delegate) \r
 #define _class_ddel            _table(_sharedstate->_class_default_delegate) \r
 #define _instance_ddel _table(_sharedstate->_instance_default_delegate) \r
+#define _weakref_ddel  _table(_sharedstate->_weakref_default_delegate) \r
 \r
 #ifdef SQUNICODE //rsl REAL STRING LEN\r
 #define rsl(l) ((l)<<1)\r
@@ -110,7 +136,7 @@ extern SQObjectPtr _minusone_;
 \r
 bool CompileTypemask(SQIntVec &res,const SQChar *typemask);\r
 \r
-void *sq_vm_malloc(unsigned int size);\r
-void *sq_vm_realloc(void *p,unsigned int oldsize,unsigned int size);\r
-void sq_vm_free(void *p,unsigned int size);\r
+void *sq_vm_malloc(SQUnsignedInteger size);\r
+void *sq_vm_realloc(void *p,SQUnsignedInteger oldsize,SQUnsignedInteger size);\r
+void sq_vm_free(void *p,SQUnsignedInteger size);\r
 #endif //_SQSTATE_H_\r