Added LightClass

This commit is contained in:
smallmodel 2023-07-30 14:26:52 +02:00
parent 40ac8a1557
commit 5a19f7f574
No known key found for this signature in database
GPG key ID: 9F2D623CEDF08512
5 changed files with 141 additions and 55 deletions

View file

@ -12,6 +12,7 @@ set(SOURCES_SHARED
"${CMAKE_SOURCE_DIR}/code/qcommon/class.cpp"
"${CMAKE_SOURCE_DIR}/code/qcommon/con_set.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/lz77.cpp"
"${CMAKE_SOURCE_DIR}/code/qcommon/mem_blockalloc.cpp"

View file

@ -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()
{

View file

@ -29,6 +29,7 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
#include "container.h"
#include "q_shared.h"
#include "str.h"
#include "lightclass.h"
#include "const_str.h"
@ -239,7 +240,7 @@ void listInheritanceOrder(const char* classname);
class SafePtrBase;
class Archiver;
class Class
class Class : public LightClass
{
public:
SafePtrBase* SafePtrList;
@ -248,11 +249,6 @@ private:
void ClearSafePointers();
public:
#ifndef _DEBUG_MEM
void* operator new(size_t);
void operator delete(void*);
#endif
Class();
virtual ~Class();

101
code/qcommon/lightclass.cpp Normal file
View 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
View 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();