ref: 9c8b9d26655464c0a69ee2dfd251f6ba835ac609
dir: /src/z_zone.h/
// Emacs style mode select -*- C++ -*- //----------------------------------------------------------------------------- // // $Id: z_zone.h 8 2005-07-23 16:44:57Z 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_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$ // 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 // // //-----------------------------------------------------------------------------