ref: 2248db293f0a0adebcee8b59d928a36b20957d84
dir: /src/z_zone.h/
// Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // // $Id: z_zone.h 119 2005-09-22 12:58:46Z fraggle $ // // Copyright(C) 1993-1996 Id Software, Inc. // Copyright(C) 2005 Simon Howard // // This program 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. // // This program 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 this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA // 02111-1307, USA. // // 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_FREE 5 /* a free block */ #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; int tag; // PU_FREE if this is free 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$ // Revision 1.3 2005/09/22 12:58:46 fraggle // Use a new PU_FREE tag to mark free blocks, rather than the 'user' field // (avoids using magic numbers to mark allocated blocks with no user) // // Revision 1.2 2005/07/23 16:44:57 fraggle // Update copyright to GNU GPL // // Revision 1.1.1.1 2005/07/23 16:19:55 fraggle // Initial import // // //-----------------------------------------------------------------------------