home *** CD-ROM | disk | FTP | other *** search
- /* Emacs style mode select -*- C++ -*- */
- /* ----------------------------------------------------------------------------- */
- /* */
- /* $Id:$ */
- /* */
- /* Copyright (C) 1993-1996 by id Software, Inc. */
- /* */
- /* This source is available for distribution and/or modification */
- /* only under the terms of the DOOM Source Code License as */
- /* published by id Software. All rights reserved. */
- /* */
- /* The source is distributed in the hope that it will be useful, */
- /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
- /* FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License */
- /* for more details. */
- /* */
- /* DESCRIPTION: */
- /* Zone Memory Allocation, perhaps NeXT ObjectiveC inspired. */
- /* Remark: this was the only stuff that, according */
- /* to John Carmack, might have been useful for */
- /* Quake. */
- /* */
- /* --------------------------------------------------------------------- */
-
-
-
- #ifndef __Z_ZONE__
- #define __Z_ZONE__
-
- #include <stdio.h>
-
- /* */
- /* ZONE MEMORY */
- /* PU - purge tags. */
- /* Tags < 100 are not overwritten until freed. */
- #define PU_STATIC 1 /* static entire execution time */
- #define PU_SOUND 2 /* static while playing */
- #define PU_MUSIC 3 /* static while playing */
- #define PU_DAVE 4 /* anything else Dave wants static */
- #define PU_LEVEL 50 /* static until level exited */
- #define PU_LEVSPEC 51 /* a special thinker in a level */
- /* Tags >= 100 are purgable whenever needed. */
- #define PU_PURGELEVEL 100
- #define PU_CACHE 101
-
-
- void Z_Init (void);
- void* Z_Malloc (int size, int tag, void *ptr);
- void Z_Free (void *ptr);
- void Z_FreeTags (int lowtag, int hightag);
- void Z_DumpHeap (int lowtag, int hightag);
- void Z_FileDumpHeap (FILE *f);
- void Z_CheckHeap (void);
- void Z_ChangeTag2 (void *ptr, int tag);
- int Z_FreeMemory (void);
-
-
- typedef struct memblock_s
- {
- int size; /* including the header and possibly tiny fragments */
- void** user; /* NULL if a free block */
- int tag; /* purgelevel */
- int id; /* should be ZONEID */
- struct memblock_s* next;
- struct memblock_s* prev;
- } memblock_t;
-
- /* */
- /* This is used to get the local FILE:LINE info from CPP */
- /* prior to really call the function in question. */
- /* */
- #define Z_ChangeTag(p,t) \
- { \
- if (( (memblock_t *)( (byte *)(p) - sizeof(memblock_t)))->id!=0x1d4a11) \
- I_Error("Z_CT at "__FILE__":%i",__LINE__); \
- Z_ChangeTag2(p,t); \
- };
-
-
-
- #endif
- /* ----------------------------------------------------------------------------- */
- /* */
- /* $Log:$ */
- /* */
- /* ----------------------------------------------------------------------------- */
-