* Update mmanager to version from article part 5.
[matthijs/ABM2.git] / ABM2 / Engine / mmanager.cpp
index 6ed687af58b108754d77a025137b813ed58b824a..549965bdeee1f819c22e1618874aaff958854970 100755 (executable)
@@ -1,9 +1,13 @@
+#ifndef USING_ENGINUITY\r
+#define USING_ENGINUITY\r
+#endif\r
 #include "engine.h"\r
 \r
 \r
 IMMObject *IMMObject::liveObjects=0;\r
 IMMObject *IMMObject::deadObjects=0;\r
 std::list<IMMObject *> IMMObject::heapObjects;\r
+unsigned long IMMObject::heapUsage=0;\r
 \r
 IMMObject::IMMObject()\r
 {\r
@@ -84,7 +88,7 @@ void IMMObject::CollectRemainingObjects(bool bEmitWarnings)
                {\r
                        //copy the object to a temporary buffer so that our '10 bytes' message doesn't\r
                        //cause an access violation\r
-                       char szBuf[11]; ZeroMemory(szBuf,11);\r
+                       char szBuf[11]; memset(szBuf,0,11);\r
                        memcpy(szBuf,liveObjects,min(liveObjects->size(),10));\r
                        CLog::Get().Write(LOG_APP,IDS_UNRELEASED_OBJECT,liveObjects,liveObjects->size(),szBuf);\r
                }\r
@@ -96,11 +100,17 @@ void IMMObject::CollectRemainingObjects(bool bEmitWarnings)
 void* IMMObject::operator new(size_t objsize)\r
 {\r
        void *newObj=malloc(objsize);\r
+       heapUsage+=objsize;\r
        heapObjects.push_back((IMMObject*)newObj);\r
+       ((IMMObject*)newObj)->heapAllocSize=objsize;\r
        return newObj;\r
 }\r
 \r
 void IMMObject::operator delete(void* obj)\r
 {\r
-       if(!((IMMObject*)obj)->bIsStackAllocated)free(obj);\r
+       if(!((IMMObject*)obj)->bIsStackAllocated)\r
+       {\r
+               heapUsage-=((IMMObject*)obj)->heapAllocSize;\r
+               free(obj);\r
+       }\r
 }\r