1
/* Copyright (C) 2001-2006 Artifex Software, Inc.
4
This software is provided AS-IS with no warranty, either express or
7
This software is distributed under license and may not be copied, modified
8
or distributed except as expressly authorized under the terms of that
9
license. Refer to licensing information at http://www.artifex.com/
10
or contact Artifex Software, Inc., 7 Mt. Lassen Drive - Suite A-134,
11
San Rafael, CA 94903, U.S.A., +1(415)492-9861, for further information.
14
/* $Id: ialloc.h 9043 2008-08-28 22:48:19Z giles $ */
15
/* Interface to Ghostscript interpreter memory allocator */
17
#ifndef ialloc_INCLUDED
18
# define ialloc_INCLUDED
23
* Define the interpreter memory manager instance.
25
#define gs_imemory (i_ctx_p->memory)
26
#define idmemory (&gs_imemory)
27
#define iimemory (gs_imemory.current)
28
#define imemory ((gs_memory_t *)iimemory)
29
#define iimemory_local (gs_imemory.space_local)
30
#define imemory_local ((gs_memory_t *)iimemory_local)
31
#define iimemory_global (gs_imemory.space_global)
32
#define imemory_global ((gs_memory_t *)iimemory_global)
33
#define iimemory_system (gs_imemory.space_system)
34
#define imemory_system ((gs_memory_t *)iimemory_system)
37
* Aliases for invoking the standard allocator interface.
39
#define ialloc_bytes(nbytes, cname)\
40
gs_alloc_bytes(imemory, nbytes, cname)
41
#define ialloc_struct(typ, pstype, cname)\
42
gs_alloc_struct(imemory, typ, pstype, cname)
43
#define ialloc_byte_array(nelts, esize, cname)\
44
gs_alloc_byte_array(imemory, nelts, esize, cname)
45
#define ialloc_struct_array(nelts, typ, pstype, cname)\
46
gs_alloc_struct_array(imemory, nelts, typ, pstype, cname)
47
#define ifree_object(data, cname)\
48
gs_free_object(imemory, data, cname)
49
#define ifree_const_object(data, cname)\
50
gs_free_const_object(imemory, data, cname)
51
#define ialloc_string(nbytes, cname)\
52
gs_alloc_string(imemory, nbytes, cname)
53
#define iresize_string(data, oldn, newn, cname)\
54
gs_resize_string(imemory, data, oldn, newn, cname)
55
#define ifree_string(data, nbytes, cname)\
56
gs_free_string(imemory, data, nbytes, cname)
57
#define ifree_const_string(data, nbytes, cname)\
58
gs_free_const_string(imemory, data, nbytes, cname)
60
/* Initialize the interpreter's allocator. */
61
int ialloc_init(gs_dual_memory_t *, gs_memory_t *, uint, bool);
63
/* ------ Internal routines ------ */
65
/* Reset the request values that identify the cause of a GC. */
66
void ialloc_reset_requested(gs_dual_memory_t *);
68
/* Validate the contents of memory. */
69
void ialloc_validate_spaces(const gs_dual_memory_t *);
71
#define ivalidate_spaces() ialloc_validate_spaces(idmemory)
74
* Local/global VM management.
77
/* Get the space attribute of the current allocator. */
78
#define ialloc_space(dmem) ((dmem)->current_space)
79
#define icurrent_space ialloc_space(idmemory)
80
uint imemory_space(const gs_ref_memory_t *);
82
/* Select the allocation space. */
83
void ialloc_set_space(gs_dual_memory_t *, uint);
85
/* Get the l_new attribute of an allocator. */
86
uint imemory_new_mask(const gs_ref_memory_t *);
88
/* Get the save level of an allocator. */
89
int imemory_save_level(const gs_ref_memory_t *);
92
* Ref-related facilities.
95
#ifdef r_type /* i.e., we know about refs */
97
/* Allocate and free ref arrays. */
98
#define ialloc_ref_array(paref, attrs, nrefs, cname)\
99
gs_alloc_ref_array(iimemory, paref, attrs, nrefs, cname)
100
#define iresize_ref_array(paref, nrefs, cname)\
101
gs_resize_ref_array(iimemory, paref, nrefs, cname)
102
#define ifree_ref_array(paref, cname)\
103
gs_free_ref_array(iimemory, paref, cname)
105
/* Allocate a string ref. */
106
#define ialloc_string_ref(psref, attrs, nbytes, cname)\
107
gs_alloc_string_ref(iimemory, psref, attrs, nbytes, cname)
109
/* Make a ref for a newly allocated structure. */
110
#define make_istruct(pref,attrs,ptr)\
111
make_struct(pref, (attrs) | icurrent_space, ptr)
112
#define make_istruct_new(pref,attrs,ptr)\
113
make_struct_new(pref, (attrs) | icurrent_space, ptr)
114
#define make_iastruct(pref,attrs,ptr)\
115
make_astruct(pref, (attrs) | icurrent_space, ptr)
116
#define make_iastruct_new(pref,attrs,ptr)\
117
make_astruct_new(pref, (attrs) | icurrent_space, ptr)
119
#endif /* ifdef r_type */
121
#endif /* ialloc_INCLUDED */