diff --git a/CMakeLists.txt b/CMakeLists.txt index d05f00ffd..ddd0b88db 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1941,6 +1941,7 @@ set_src(ENGINE_SERVER GLOB_RECURSE src/engine/server upnp.h ) set_src(GAME_SERVER GLOB_RECURSE src/game/server + alloc.h ddracechat.cpp ddracechat.h ddracecommands.cpp diff --git a/src/game/server/alloc.h b/src/game/server/alloc.h new file mode 100644 index 000000000..3fcb7799d --- /dev/null +++ b/src/game/server/alloc.h @@ -0,0 +1,62 @@ +/* (c) Magnus Auvinen. See licence.txt in the root of the distribution for more information. */ +/* If you are missing that file, acquire a complete release at teeworlds.com. */ +#ifndef GAME_SERVER_ALLOC_H +#define GAME_SERVER_ALLOC_H + +#include + +#include + +#define MACRO_ALLOC_HEAP() \ +public: \ + void *operator new(size_t Size) \ + { \ + void *p = malloc(Size); \ + mem_zero(p, Size); \ + return p; \ + } \ + void operator delete(void *pPtr) \ + { \ + free(pPtr); \ + } \ +\ +private: + +#define MACRO_ALLOC_POOL_ID() \ +public: \ + void *operator new(size_t Size, int id); \ + void operator delete(void *p, int id); \ + void operator delete(void *p); /* NOLINT(misc-new-delete-overloads) */ \ +\ +private: + +#define MACRO_ALLOC_POOL_ID_IMPL(POOLTYPE, PoolSize) \ + static char ms_PoolData##POOLTYPE[PoolSize][sizeof(POOLTYPE)] = {{0}}; \ + static int ms_PoolUsed##POOLTYPE[PoolSize] = {0}; \ + void *POOLTYPE::operator new(size_t Size, int id) \ + { \ + dbg_assert(sizeof(POOLTYPE) == Size, "size error"); \ + dbg_assert(!ms_PoolUsed##POOLTYPE[id], "already used"); \ + /*dbg_msg("pool", "++ %s %d", #POOLTYPE, id);*/ \ + ms_PoolUsed##POOLTYPE[id] = 1; \ + mem_zero(ms_PoolData##POOLTYPE[id], Size); \ + return ms_PoolData##POOLTYPE[id]; \ + } \ + void POOLTYPE::operator delete(void *p, int id) \ + { \ + dbg_assert(ms_PoolUsed##POOLTYPE[id], "not used"); \ + dbg_assert(id == (POOLTYPE *)p - (POOLTYPE *)ms_PoolData##POOLTYPE, "invalid id"); \ + /*dbg_msg("pool", "-- %s %d", #POOLTYPE, id);*/ \ + ms_PoolUsed##POOLTYPE[id] = 0; \ + mem_zero(ms_PoolData##POOLTYPE[id], sizeof(POOLTYPE)); \ + } \ + void POOLTYPE::operator delete(void *p) /* NOLINT(misc-new-delete-overloads) */ \ + { \ + int id = (POOLTYPE *)p - (POOLTYPE *)ms_PoolData##POOLTYPE; \ + dbg_assert(ms_PoolUsed##POOLTYPE[id], "not used"); \ + /*dbg_msg("pool", "-- %s %d", #POOLTYPE, id);*/ \ + ms_PoolUsed##POOLTYPE[id] = 0; \ + mem_zero(ms_PoolData##POOLTYPE[id], sizeof(POOLTYPE)); \ + } + +#endif diff --git a/src/game/server/entity.h b/src/game/server/entity.h index a3521ea53..bc6ef59a9 100644 --- a/src/game/server/entity.h +++ b/src/game/server/entity.h @@ -5,59 +5,8 @@ #include #include -#include -#define MACRO_ALLOC_HEAP() \ -public: \ - void *operator new(size_t Size) \ - { \ - void *p = malloc(Size); \ - mem_zero(p, Size); \ - return p; \ - } \ - void operator delete(void *pPtr) \ - { \ - free(pPtr); \ - } \ -\ -private: - -#define MACRO_ALLOC_POOL_ID() \ -public: \ - void *operator new(size_t Size, int id); \ - void operator delete(void *p, int id); \ - void operator delete(void *p); /* NOLINT(misc-new-delete-overloads) */ \ -\ -private: - -#define MACRO_ALLOC_POOL_ID_IMPL(POOLTYPE, PoolSize) \ - static char ms_PoolData##POOLTYPE[PoolSize][sizeof(POOLTYPE)] = {{0}}; \ - static int ms_PoolUsed##POOLTYPE[PoolSize] = {0}; \ - void *POOLTYPE::operator new(size_t Size, int id) \ - { \ - dbg_assert(sizeof(POOLTYPE) == Size, "size error"); \ - dbg_assert(!ms_PoolUsed##POOLTYPE[id], "already used"); \ - /*dbg_msg("pool", "++ %s %d", #POOLTYPE, id);*/ \ - ms_PoolUsed##POOLTYPE[id] = 1; \ - mem_zero(ms_PoolData##POOLTYPE[id], Size); \ - return ms_PoolData##POOLTYPE[id]; \ - } \ - void POOLTYPE::operator delete(void *p, int id) \ - { \ - dbg_assert(ms_PoolUsed##POOLTYPE[id], "not used"); \ - dbg_assert(id == (POOLTYPE *)p - (POOLTYPE *)ms_PoolData##POOLTYPE, "invalid id"); \ - /*dbg_msg("pool", "-- %s %d", #POOLTYPE, id);*/ \ - ms_PoolUsed##POOLTYPE[id] = 0; \ - mem_zero(ms_PoolData##POOLTYPE[id], sizeof(POOLTYPE)); \ - } \ - void POOLTYPE::operator delete(void *p) /* NOLINT(misc-new-delete-overloads) */ \ - { \ - int id = (POOLTYPE *)p - (POOLTYPE *)ms_PoolData##POOLTYPE; \ - dbg_assert(ms_PoolUsed##POOLTYPE[id], "not used"); \ - /*dbg_msg("pool", "-- %s %d", #POOLTYPE, id);*/ \ - ms_PoolUsed##POOLTYPE[id] = 0; \ - mem_zero(ms_PoolData##POOLTYPE[id], sizeof(POOLTYPE)); \ - } +#include "alloc.h" /* Class: Entity