123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- // 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:$
- //
- //-----------------------------------------------------------------------------
|