mirror of
https://github.com/openmoh/openmohaa.git
synced 2025-04-28 21:57:57 +03:00
Added LightClass
This commit is contained in:
parent
40ac8a1557
commit
5a19f7f574
5 changed files with 141 additions and 55 deletions
|
@ -12,6 +12,7 @@ set(SOURCES_SHARED
|
||||||
"${CMAKE_SOURCE_DIR}/code/qcommon/class.cpp"
|
"${CMAKE_SOURCE_DIR}/code/qcommon/class.cpp"
|
||||||
"${CMAKE_SOURCE_DIR}/code/qcommon/con_set.cpp"
|
"${CMAKE_SOURCE_DIR}/code/qcommon/con_set.cpp"
|
||||||
"${CMAKE_SOURCE_DIR}/code/qcommon/con_timer.cpp"
|
"${CMAKE_SOURCE_DIR}/code/qcommon/con_timer.cpp"
|
||||||
|
"${CMAKE_SOURCE_DIR}/code/qcommon/lightclass.cpp"
|
||||||
"${CMAKE_SOURCE_DIR}/code/qcommon/listener.cpp"
|
"${CMAKE_SOURCE_DIR}/code/qcommon/listener.cpp"
|
||||||
"${CMAKE_SOURCE_DIR}/code/qcommon/lz77.cpp"
|
"${CMAKE_SOURCE_DIR}/code/qcommon/lz77.cpp"
|
||||||
"${CMAKE_SOURCE_DIR}/code/qcommon/mem_blockalloc.cpp"
|
"${CMAKE_SOURCE_DIR}/code/qcommon/mem_blockalloc.cpp"
|
||||||
|
|
|
@ -212,56 +212,7 @@ void CLASS_Print(FILE *class_file, const char *fmt, ...)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t totalmemallocated = 0;
|
|
||||||
unsigned int numclassesallocated = 0;
|
|
||||||
|
|
||||||
bool classInited = false;
|
|
||||||
|
|
||||||
#ifndef _DEBUG_MEM
|
|
||||||
void *Class::operator new(size_t s)
|
|
||||||
{
|
|
||||||
size_t *p;
|
|
||||||
|
|
||||||
if (s == 0) {
|
|
||||||
static void *empty_memory = nullptr;
|
|
||||||
return &empty_memory;
|
|
||||||
}
|
|
||||||
|
|
||||||
s += sizeof(size_t);
|
|
||||||
|
|
||||||
# ifdef GAME_DLL
|
|
||||||
p = (size_t *)gi.Malloc(s);
|
|
||||||
# elif defined(CGAME_DLL)
|
|
||||||
p = (size_t *)cgi.Malloc(s);
|
|
||||||
# else
|
|
||||||
p = (size_t *)Z_Malloc(s);
|
|
||||||
# endif
|
|
||||||
|
|
||||||
totalmemallocated += s;
|
|
||||||
numclassesallocated++;
|
|
||||||
|
|
||||||
p++;
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Class::operator delete(void *ptr)
|
|
||||||
{
|
|
||||||
size_t *p = ((size_t *)ptr) - 1;
|
|
||||||
|
|
||||||
totalmemallocated -= *p;
|
|
||||||
numclassesallocated--;
|
|
||||||
|
|
||||||
# ifdef GAME_DLL
|
|
||||||
gi.Free(p);
|
|
||||||
# elif defined(CGAME_DLL)
|
|
||||||
cgi.Free(p);
|
|
||||||
# else
|
|
||||||
Z_Free(p);
|
|
||||||
# endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Class::Class()
|
Class::Class()
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
#include "container.h"
|
#include "container.h"
|
||||||
#include "q_shared.h"
|
#include "q_shared.h"
|
||||||
#include "str.h"
|
#include "str.h"
|
||||||
|
#include "lightclass.h"
|
||||||
|
|
||||||
#include "const_str.h"
|
#include "const_str.h"
|
||||||
|
|
||||||
|
@ -239,7 +240,7 @@ void listInheritanceOrder(const char* classname);
|
||||||
class SafePtrBase;
|
class SafePtrBase;
|
||||||
class Archiver;
|
class Archiver;
|
||||||
|
|
||||||
class Class
|
class Class : public LightClass
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SafePtrBase* SafePtrList;
|
SafePtrBase* SafePtrList;
|
||||||
|
@ -248,11 +249,6 @@ private:
|
||||||
void ClearSafePointers();
|
void ClearSafePointers();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
#ifndef _DEBUG_MEM
|
|
||||||
void* operator new(size_t);
|
|
||||||
void operator delete(void*);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Class();
|
Class();
|
||||||
virtual ~Class();
|
virtual ~Class();
|
||||||
|
|
||||||
|
|
101
code/qcommon/lightclass.cpp
Normal file
101
code/qcommon/lightclass.cpp
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/*
|
||||||
|
===========================================================================
|
||||||
|
Copyright (C) 2023 the OpenMoHAA team
|
||||||
|
|
||||||
|
This file is part of OpenMoHAA source code.
|
||||||
|
|
||||||
|
OpenMoHAA source code is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the License,
|
||||||
|
or (at your option) any later version.
|
||||||
|
|
||||||
|
OpenMoHAA source code is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenMoHAA source code; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
===========================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "lightclass.h"
|
||||||
|
|
||||||
|
#if defined(GAME_DLL)
|
||||||
|
|
||||||
|
# include "../fgame/g_local.h"
|
||||||
|
|
||||||
|
# define LIGHTCLASS_Printf gi.Printf
|
||||||
|
# define LIGHTCLASS_DPrintf gi.DPrintf
|
||||||
|
# define LIGHTCLASS_Error gi.Error
|
||||||
|
|
||||||
|
#elif defined(CGAME_DLL)
|
||||||
|
|
||||||
|
# include "../cgame/cg_local.h"
|
||||||
|
|
||||||
|
# define LIGHTCLASS_Printf cgi.Printf
|
||||||
|
# define LIGHTCLASS_DPrintf cgi.DPrintf
|
||||||
|
# define LIGHTCLASS_Error cgi.Error
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
# include "qcommon.h"
|
||||||
|
|
||||||
|
# define LIGHTCLASS_Printf Com_Printf
|
||||||
|
# define LIGHTCLASS_DPrintf Com_DPrintf
|
||||||
|
# define LIGHTCLASS_Error Com_Error
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
size_t totalmemallocated = 0;
|
||||||
|
unsigned int numclassesallocated = 0;
|
||||||
|
|
||||||
|
void DisplayMemoryUsage() {
|
||||||
|
LIGHTCLASS_Printf("Classes %-5d Class memory used: %d\n", numclassesallocated, totalmemallocated);
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef _DEBUG_MEM
|
||||||
|
void *LightClass::operator new(size_t s)
|
||||||
|
{
|
||||||
|
size_t *p;
|
||||||
|
|
||||||
|
if (s == 0) {
|
||||||
|
static void *empty_memory = nullptr;
|
||||||
|
return &empty_memory;
|
||||||
|
}
|
||||||
|
|
||||||
|
s += sizeof(size_t);
|
||||||
|
|
||||||
|
# ifdef GAME_DLL
|
||||||
|
p = (size_t *)gi.Malloc(s);
|
||||||
|
# elif defined(CGAME_DLL)
|
||||||
|
p = (size_t *)cgi.Malloc(s);
|
||||||
|
# else
|
||||||
|
p = (size_t *)Z_Malloc(s);
|
||||||
|
# endif
|
||||||
|
|
||||||
|
totalmemallocated += s;
|
||||||
|
numclassesallocated++;
|
||||||
|
|
||||||
|
p++;
|
||||||
|
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LightClass::operator delete(void *ptr)
|
||||||
|
{
|
||||||
|
size_t *p = ((size_t *)ptr) - 1;
|
||||||
|
|
||||||
|
totalmemallocated -= *p;
|
||||||
|
numclassesallocated--;
|
||||||
|
|
||||||
|
# ifdef GAME_DLL
|
||||||
|
gi.Free(p);
|
||||||
|
# elif defined(CGAME_DLL)
|
||||||
|
cgi.Free(p);
|
||||||
|
# else
|
||||||
|
Z_Free(p);
|
||||||
|
# endif
|
||||||
|
}
|
||||||
|
#endif
|
37
code/qcommon/lightclass.h
Normal file
37
code/qcommon/lightclass.h
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
/*
|
||||||
|
===========================================================================
|
||||||
|
Copyright (C) 2023 the OpenMoHAA team
|
||||||
|
|
||||||
|
This file is part of OpenMoHAA source code.
|
||||||
|
|
||||||
|
OpenMoHAA source code is free software; you can redistribute it
|
||||||
|
and/or modify it under the terms of the GNU General Public License as
|
||||||
|
published by the Free Software Foundation; either version 2 of the License,
|
||||||
|
or (at your option) any later version.
|
||||||
|
|
||||||
|
OpenMoHAA source code is distributed in the hope that it will be
|
||||||
|
useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with OpenMoHAA source code; if not, write to the Free Software
|
||||||
|
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
|
===========================================================================
|
||||||
|
*/
|
||||||
|
|
||||||
|
// lightclass.h: Implementation of a light class
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "q_shared.h"
|
||||||
|
|
||||||
|
class LightClass {
|
||||||
|
public:
|
||||||
|
#ifndef _DEBUG_MEM
|
||||||
|
void* operator new(size_t);
|
||||||
|
void operator delete(void*);
|
||||||
|
#endif
|
||||||
|
};
|
||||||
|
|
||||||
|
void DisplayMemoryUsage();
|
Loading…
Add table
Add a link
Reference in a new issue