aboutsummaryrefslogtreecommitdiff
path: root/src/z_zone.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/z_zone.h')
-rw-r--r--src/z_zone.h129
1 files changed, 129 insertions, 0 deletions
diff --git a/src/z_zone.h b/src/z_zone.h
new file mode 100644
index 0000000..f70ce08
--- /dev/null
+++ b/src/z_zone.h
@@ -0,0 +1,129 @@
1/* Emacs style mode select -*- C++ -*-
2 *-----------------------------------------------------------------------------
3 *
4 *
5 * PrBoom: a Doom port merged with LxDoom and LSDLDoom
6 * based on BOOM, a modified and improved DOOM engine
7 * Copyright (C) 1999 by
8 * id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
9 * Copyright (C) 1999-2000 by
10 * Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
11 * Copyright 2005, 2006 by
12 * Florian Schulze, Colin Phipps, Neil Stevens, Andrey Budko
13 *
14 * This program is free software; you can redistribute it and/or
15 * modify it under the terms of the GNU General Public License
16 * as published by the Free Software Foundation; either version 2
17 * of the License, or (at your option) any later version.
18 *
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software
26 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
27 * 02111-1307, USA.
28 *
29 * DESCRIPTION:
30 * Zone Memory Allocation, perhaps NeXT ObjectiveC inspired.
31 * Remark: this was the only stuff that, according
32 * to John Carmack, might have been useful for
33 * Quake.
34 *
35 * Rewritten by Lee Killough, though, since it was not efficient enough.
36 *
37 *---------------------------------------------------------------------*/
38
39#ifndef __Z_ZONE__
40#define __Z_ZONE__
41
42#ifndef __GNUC__
43#define __attribute__(x)
44#endif
45
46// Include system definitions so that prototypes become
47// active before macro replacements below are in effect.
48
49#ifdef HAVE_CONFIG_H
50#include "config.h"
51#endif
52#include <stdio.h>
53#include <stdlib.h>
54#include <string.h>
55#include <assert.h>
56
57// ZONE MEMORY
58// PU - purge tags.
59
60enum {PU_FREE, PU_STATIC, PU_SOUND, PU_MUSIC, PU_LEVEL, PU_LEVSPEC, PU_CACHE,
61 /* Must always be last -- killough */ PU_MAX};
62
63#define PU_PURGELEVEL PU_CACHE /* First purgable tag's level */
64
65#ifdef INSTRUMENTED
66#define DA(x,y) ,x,y
67#define DAC(x,y) x,y
68#else
69#define DA(x,y)
70#define DAC(x,y)
71#endif
72
73void *(Z_Malloc)(size_t size, int tag, void **ptr DA(const char *, int));
74void (Z_Free)(void *ptr DA(const char *, int));
75void (Z_FreeTags)(int lowtag, int hightag DA(const char *, int));
76void (Z_ChangeTag)(void *ptr, int tag DA(const char *, int));
77void (Z_Init)(void);
78void Z_Close(void);
79void *(Z_Calloc)(size_t n, size_t n2, int tag, void **user DA(const char *, int));
80void *(Z_Realloc)(void *p, size_t n, int tag, void **user DA(const char *, int));
81char *(Z_Strdup)(const char *s, int tag, void **user DA(const char *, int));
82void (Z_CheckHeap)(DAC(const char *,int)); // killough 3/22/98: add file/line info
83void Z_DumpHistory(char *);
84
85#ifdef INSTRUMENTED
86/* cph - save space if not debugging, don't require file
87 * and line to memory calls */
88#define Z_Free(a) (Z_Free) (a, __FILE__,__LINE__)
89#define Z_FreeTags(a,b) (Z_FreeTags) (a,b, __FILE__,__LINE__)
90#define Z_ChangeTag(a,b) (Z_ChangeTag)(a,b, __FILE__,__LINE__)
91#define Z_Malloc(a,b,c) (Z_Malloc) (a,b,c, __FILE__,__LINE__)
92#define Z_Strdup(a,b,c) (Z_Strdup) (a,b,c, __FILE__,__LINE__)
93#define Z_Calloc(a,b,c,d) (Z_Calloc) (a,b,c,d,__FILE__,__LINE__)
94#define Z_Realloc(a,b,c,d) (Z_Realloc) (a,b,c,d,__FILE__,__LINE__)
95#define Z_CheckHeap() (Z_CheckHeap)(__FILE__,__LINE__)
96#endif
97
98/* cphipps 2001/11/18 -
99 * If we're using memory mapped file access to WADs, we won't need to maintain
100 * our own heap. So we *could* let "normal" malloc users use the libc malloc
101 * directly, for efficiency. Except we do need a wrapper to handle out of memory
102 * errors... damn, ok, we'll leave it for now.
103 */
104#ifndef HAVE_LIBDMALLOC
105// Remove all definitions before including system definitions
106
107#undef malloc
108#undef free
109#undef realloc
110#undef calloc
111#undef strdup
112
113#define malloc(n) Z_Malloc(n,PU_STATIC,0)
114#define free(p) Z_Free(p)
115#define realloc(p,n) Z_Realloc(p,n,PU_STATIC,0)
116#define calloc(n1,n2) Z_Calloc(n1,n2,PU_STATIC,0)
117#define strdup(s) Z_Strdup(s,PU_STATIC,0)
118
119#else
120
121#ifdef HAVE_LIBDMALLOC
122#include <dmalloc.h>
123#endif
124
125#endif
126
127void Z_ZoneHistory(char *);
128
129#endif