0,0 → 1,86 |
// 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:$ |
// |
//----------------------------------------------------------------------------- |