1 /* Copyright (C) 2001-2006 Artifex Software, Inc. 2 All Rights Reserved. 3 4 This software is provided AS-IS with no warranty, either express or 5 implied. 6 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. 12 */ 13 14 /* $Id: ialloc.h 9043 2008-08-28 22:48:19Z giles $ */ 15 /* Interface to Ghostscript interpreter memory allocator */ 16 17 #ifndef ialloc_INCLUDED 18 # define ialloc_INCLUDED 19 20 #include "imemory.h" 21 22 /* 23 * Define the interpreter memory manager instance. 24 */ 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) 35 36 /* 37 * Aliases for invoking the standard allocator interface. 38 */ 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) 59 60 /* Initialize the interpreter's allocator. */ 61 int ialloc_init(gs_dual_memory_t *, gs_memory_t *, uint, bool); 62 63 /* ------ Internal routines ------ */ 64 65 /* Reset the request values that identify the cause of a GC. */ 66 void ialloc_reset_requested(gs_dual_memory_t *); 67 68 /* Validate the contents of memory. */ 69 void ialloc_validate_spaces(const gs_dual_memory_t *); 70 71 #define ivalidate_spaces() ialloc_validate_spaces(idmemory) 72 73 /* 74 * Local/global VM management. 75 */ 76 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 *); 81 82 /* Select the allocation space. */ 83 void ialloc_set_space(gs_dual_memory_t *, uint); 84 85 /* Get the l_new attribute of an allocator. */ 86 uint imemory_new_mask(const gs_ref_memory_t *); 87 88 /* Get the save level of an allocator. */ 89 int imemory_save_level(const gs_ref_memory_t *); 90 91 /* 92 * Ref-related facilities. 93 */ 94 95 #ifdef r_type /* i.e., we know about refs */ 96 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) 104 105 /* Allocate a string ref. */ 106 #define ialloc_string_ref(psref, attrs, nbytes, cname)\ 107 gs_alloc_string_ref(iimemory, psref, attrs, nbytes, cname) 108 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) 118 119 #endif /* ifdef r_type */ 120 121 #endif /* ialloc_INCLUDED */ 122