Update to Squirrel 3.0.6
[supertux.git] / external / squirrel / squirrel / squtils.h
old mode 100755 (executable)
new mode 100644 (file)
index 6deef43..84a1176
@@ -2,7 +2,6 @@
 #ifndef _SQUTILS_H_\r
 #define _SQUTILS_H_\r
 \r
-/* clang fix: "error: call to function 'sq_vm_free' that is neither visible in the template definition nor found by argument-dependent lookup" */\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
@@ -13,6 +12,8 @@ void sq_vm_free(void *p,SQUnsignedInteger size);
 #define SQ_FREE(__ptr,__size) sq_vm_free((__ptr),(__size));\r
 #define SQ_REALLOC(__ptr,__oldsize,__size) sq_vm_realloc((__ptr),(__oldsize),(__size));\r
 \r
+#define sq_aligning(v) (((size_t)(v) + (SQ_ALIGNMENT-1)) & (~(SQ_ALIGNMENT-1)))\r
+\r
 //sqvector mini vector class, supports objects by value\r
 template<typename T> class sqvector\r
 {\r
@@ -29,7 +30,13 @@ public:
        }\r
        void copy(const sqvector<T>& v)\r
        {\r
-               resize(v._size);\r
+               if(_size) {\r
+                       resize(0); //destroys all previous stuff\r
+               }\r
+               //resize(v._size);\r
+               if(v._size > _allocated) {\r
+                       _realloc(v._size);\r
+               }\r
                for(SQUnsignedInteger i = 0; i < v._size; i++) {\r
                        new ((void *)&_vals[i]) T(v._vals[i]);\r
                }\r