87 lines
2.4 KiB
C
87 lines
2.4 KiB
C
|
// 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:$
|
||
|
//
|
||
|
//-----------------------------------------------------------------------------
|