]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - zone.h
Fixed a bug in the menu.
[xonotic/darkplaces.git] / zone.h
diff --git a/zone.h b/zone.h
index 3396707c4091dbaea0b5e05edc664753982a090f..f49f14712d881ceabe5f0998c7e4d6d71dcdf282 100644 (file)
--- a/zone.h
+++ b/zone.h
@@ -52,10 +52,10 @@ typedef struct memheader_s
        // size of the memory after the header (excluding header and sentinel2)
        int size;
        // file name and line where Mem_Alloc was called
-       char *filename;
+       const char *filename;
        int fileline;
        // should always be MEMHEADER_SENTINEL1
-       int sentinel1;
+       unsigned int sentinel1;
        // immediately followed by data, which is followed by a MEMHEADER_SENTINEL2 byte
 }
 memheader_t;
@@ -66,12 +66,12 @@ typedef struct memclump_s
        // contents of the clump
        qbyte block[MEMCLUMPSIZE];
        // should always be MEMCLUMP_SENTINEL
-       int sentinel1;
+       unsigned int sentinel1;
        // if a bit is on, it means that the MEMUNIT bytes it represents are
        // allocated, otherwise free
        int bits[MEMBITINTS];
        // should always be MEMCLUMP_SENTINEL
-       int sentinel2;
+       unsigned int sentinel2;
        // if this drops to 0, the clump is freed
        int blocksinuse;
        // largest block of memory available (this is reset to an optimistic
@@ -86,7 +86,7 @@ memclump_t;
 typedef struct mempool_s
 {
        // should always be MEMHEADER_SENTINEL1
-       int sentinel1;
+       unsigned int sentinel1;
        // chain of individual memory allocations
        struct memheader_s *chain;
 #if MEMCLUMPING
@@ -103,11 +103,13 @@ typedef struct mempool_s
        char name[POOLNAMESIZE];
        // linked into global mempool list
        struct mempool_s *next;
+       // parent object (used for nested memory pools)
+       struct mempool_s *parent;
        // file name and line where Mem_AllocPool was called
-       char *filename;
+       const char *filename;
        int fileline;
        // should always be MEMHEADER_SENTINEL1
-       int sentinel2;
+       unsigned int sentinel2;
 }
 mempool_t;
 
@@ -115,17 +117,18 @@ mempool_t;
 #define Mem_Free(mem) _Mem_Free(mem, __FILE__, __LINE__)
 #define Mem_CheckSentinels(data) _Mem_CheckSentinels(data, __FILE__, __LINE__)
 #define Mem_CheckSentinelsGlobal() _Mem_CheckSentinelsGlobal(__FILE__, __LINE__)
-#define Mem_AllocPool(name) _Mem_AllocPool(name, __FILE__, __LINE__)
+#define Mem_AllocPool(name) _Mem_AllocPool(name, NULL, __FILE__, __LINE__)
+#define Mem_AllocNestedPool(name, parent) _Mem_AllocPool(name, (parent), __FILE__, __LINE__)
 #define Mem_FreePool(pool) _Mem_FreePool(pool, __FILE__, __LINE__)
 #define Mem_EmptyPool(pool) _Mem_EmptyPool(pool, __FILE__, __LINE__)
 
-void *_Mem_Alloc(mempool_t *pool, int size, char *filename, int fileline);
-void _Mem_Free(void *data, char *filename, int fileline);
-mempool_t *_Mem_AllocPool(char *name, char *filename, int fileline);
-void _Mem_FreePool(mempool_t **pool, char *filename, int fileline);
-void _Mem_EmptyPool(mempool_t *pool, char *filename, int fileline);
-void _Mem_CheckSentinels(void *data, char *filename, int fileline);
-void _Mem_CheckSentinelsGlobal(char *filename, int fileline);
+void *_Mem_Alloc(mempool_t *pool, int size, const char *filename, int fileline);
+void _Mem_Free(void *data, const char *filename, int fileline);
+mempool_t *_Mem_AllocPool(const char *name, mempool_t *parent, const char *filename, int fileline);
+void _Mem_FreePool(mempool_t **pool, const char *filename, int fileline);
+void _Mem_EmptyPool(mempool_t *pool, const char *filename, int fileline);
+void _Mem_CheckSentinels(void *data, const char *filename, int fileline);
+void _Mem_CheckSentinelsGlobal(const char *filename, int fileline);
 
 // used for temporary allocations
 mempool_t *tempmempool;
@@ -137,5 +140,8 @@ extern mempool_t *zonemempool;
 #define Z_Malloc(size) Mem_Alloc(zonemempool,size)
 #define Z_Free(data) Mem_Free(data)
 
+extern struct cvar_s developer_memory;
+extern struct cvar_s developer_memorydebug;
+
 #endif